X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FHooks.php;h=046a149da8f3a6607a633554921e30ef172677a5;hb=40589a98d7743ae0726de1321f0933f4aae8720f;hp=c00fbc1447dffb364cdcd7dbce5616d390dff0c5;hpb=60209332e860b00a2489dfdfc2d45da9dfe21f54;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Hooks.php b/includes/Hooks.php index c00fbc1447..046a149da8 100644 --- a/includes/Hooks.php +++ b/includes/Hooks.php @@ -18,8 +18,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA * * @author Evan Prodromou - * @package MediaWiki * @see hooks.txt + * @file */ @@ -28,10 +28,9 @@ * careful about its contents. So, there's a lot more error-checking * in here than would normally be necessary. */ -function wfRunHooks($event, $args = null) { +function wfRunHooks($event, $args = array()) { global $wgHooks; - $fname = 'wfRunHooks'; if (!is_array($wgHooks)) { throw new MWException("Global hooks array is not an array!\n"); @@ -101,18 +100,21 @@ function wfRunHooks($event, $args = null) { $hook_args = $args; } - if ( isset( $object ) ) { $func = get_class( $object ) . '::' . $method; + $callback = array( $object, $method ); + } elseif ( false !== ( $pos = strpos( $func, '::' ) ) ) { + $callback = array( substr( $func, 0, $pos ), substr( $func, $pos + 2 ) ); + } else { + $callback = $func; } + // Run autoloader (workaround for call_user_func_array bug) + is_callable( $callback ); + /* Call the hook. */ wfProfileIn( $func ); - if( isset( $object ) ) { - $retval = call_user_func_array(array($object, $method), $hook_args); - } else { - $retval = call_user_func_array($func, $hook_args); - } + $retval = call_user_func_array( $callback, $hook_args ); wfProfileOut( $func ); /* String return is an error; false return means stop processing. */ @@ -121,6 +123,20 @@ function wfRunHooks($event, $args = null) { global $wgOut; $wgOut->showFatalError($retval); return false; + } elseif( $retval === null ) { + if( is_array( $callback ) ) { + if( is_object( $callback[0] ) ) { + $prettyClass = get_class( $callback[0] ); + } else { + $prettyClass = strval( $callback[0] ); + } + $prettyFunc = $prettyClass . '::' . strval( $callback[1] ); + } else { + $prettyFunc = strval( $callback ); + } + throw new MWException( "Detected bug in an extension! " . + "Hook $prettyFunc failed to return a value; " . + "should return true to continue hook processing or false to abort." ); } else if (!$retval) { return false; } @@ -128,4 +144,3 @@ function wfRunHooks($event, $args = null) { return true; } -?>