Merge "Revert "README: Changed link from bugs.mediawiki.org...""
[lhc/web/wiklou.git] / includes / Hooks.php
index 980d350..b6c194c 100644 (file)
  * @file
  */
 
-/**
- * @since 1.18
- */
-class MWHookException extends MWException {
-}
-
 /**
  * Hooks class.
  *
@@ -42,7 +36,7 @@ class Hooks {
         * Array of events mapped to an array of callbacks to be run
         * when that event is triggered.
         */
-       protected static $handlers = array();
+       protected static $handlers = [];
 
        /**
         * Attach an event handler to a given hook.
@@ -54,7 +48,7 @@ class Hooks {
         */
        public static function register( $name, $callback ) {
                if ( !isset( self::$handlers[$name] ) ) {
-                       self::$handlers[$name] = array();
+                       self::$handlers[$name] = [];
                }
 
                self::$handlers[$name][] = $callback;
@@ -104,7 +98,7 @@ class Hooks {
                global $wgHooks;
 
                if ( !self::isRegistered( $name ) ) {
-                       return array();
+                       return [];
                } elseif ( !isset( self::$handlers[$name] ) ) {
                        return $wgHooks[$name];
                } elseif ( !isset( $wgHooks[$name] ) ) {
@@ -134,11 +128,11 @@ class Hooks {
         *   processing to continue. Not returning a value (or explicitly
         *   returning null) is equivalent to returning true.
         */
-       public static function run( $event, array $args = array(), $deprecatedVersion = null ) {
+       public static function run( $event, array $args = [], $deprecatedVersion = null ) {
                foreach ( self::getHandlers( $event ) as $hook ) {
                        // Turn non-array values into an array. (Can't use casting because of objects.)
                        if ( !is_array( $hook ) ) {
-                               $hook = array( $hook );
+                               $hook = [ $hook ];
                        }
 
                        if ( !array_filter( $hook ) ) {
@@ -169,7 +163,7 @@ class Hooks {
                                }
 
                                $func = get_class( $object ) . '::' . $method;
-                               $callback = array( $object, $method );
+                               $callback = [ $object, $method ];
                        } elseif ( is_string( $hook[0] ) ) {
                                $func = $callback = array_shift( $hook );
                        } else {
@@ -193,34 +187,17 @@ class Hooks {
                        $badhookmsg = null;
                        $hook_args = array_merge( $hook, $args );
 
-                       set_error_handler( 'Hooks::hookErrorHandler' );
-
                        // mark hook as deprecated, if deprecation version is specified
                        if ( $deprecatedVersion !== null ) {
                                wfDeprecated( "$event hook (used in $func)", $deprecatedVersion );
                        }
 
-                       try {
-                               $retval = call_user_func_array( $callback, $hook_args );
-                       } catch ( MWHookException $e ) {
-                               $badhookmsg = $e->getMessage();
-                       } catch ( Exception $e ) {
-                               restore_error_handler();
-                               throw $e;
-                       }
-
-                       restore_error_handler();
+                       $retval = call_user_func_array( $callback, $hook_args );
 
                        // Process the return value.
                        if ( is_string( $retval ) ) {
                                // String returned means error.
                                throw new FatalError( $retval );
-                       } elseif ( $badhookmsg !== null ) {
-                               // Exception was thrown from Hooks::hookErrorHandler.
-                               throw new MWException(
-                                       'Detected bug in an extension! ' .
-                                       "Hook $func has invalid call signature; " . $badhookmsg
-                               );
                        } elseif ( $retval === false ) {
                                // False was returned. Stop processing, but no error.
                                return false;
@@ -229,31 +206,4 @@ class Hooks {
 
                return true;
        }
-
-       /**
-        * Handle PHP errors issued inside a hook. Catch errors that have to do
-        * with a function expecting a reference, missing arguments, or wrong argument
-        * types. Pass all others through to to the default error handler.
-        *
-        * This is useful for throwing errors for major callback invocation errors
-        * (with regard to parameter signature) which PHP just gives warnings for.
-        *
-        * @since 1.18
-        *
-        * @param int $errno Error number (unused)
-        * @param string $errstr Error message
-        * @throws MWHookException If the error has to do with the function signature
-        * @return bool
-        */
-       public static function hookErrorHandler( $errno, $errstr ) {
-               if ( strpos( $errstr, 'expected to be a reference, value given' ) !== false
-                       || strpos( $errstr, 'Missing argument ' ) !== false
-                       || strpos( $errstr, ' expects parameter ' ) !== false
-               ) {
-                       throw new MWHookException( $errstr, $errno );
-               }
-
-               // Delegate unhandled errors to the default handlers
-               return false;
-       }
 }