Make an empty "?action=" parameter default to "view"
[lhc/web/wiklou.git] / includes / actions / Action.php
index 97d7132..4208b3b 100644 (file)
@@ -96,12 +96,15 @@ abstract class Action {
                $classOrCallable = self::getClass( $action, $page->getActionOverrides() );
 
                if ( is_string( $classOrCallable ) ) {
+                       if ( !class_exists( $classOrCallable ) ) {
+                               return false;
+                       }
                        $obj = new $classOrCallable( $page, $context );
                        return $obj;
                }
 
                if ( is_callable( $classOrCallable ) ) {
-                       return call_user_func_array( $classOrCallable, array( $page, $context ) );
+                       return call_user_func_array( $classOrCallable, [ $page, $context ] );
                }
 
                return $classOrCallable;
@@ -144,7 +147,7 @@ abstract class Action {
                // Trying to get a WikiPage for NS_SPECIAL etc. will result
                // in WikiPage::factory throwing "Invalid or virtual namespace -1 given."
                // For SpecialPages et al, default to action=view.
-               if ( !$context->canUseWikiPage() ) {
+               if ( $actionName === '' || !$context->canUseWikiPage() ) {
                        return 'view';
                }
 
@@ -164,7 +167,7 @@ abstract class Action {
         * @return bool
         */
        final public static function exists( $name ) {
-               return self::getClass( $name, array() ) !== null;
+               return self::getClass( $name, [] ) !== null;
        }
 
        /**
@@ -252,7 +255,7 @@ abstract class Action {
         */
        final public function msg() {
                $params = func_get_args();
-               return call_user_func_array( array( $this->getContext(), 'msg' ), $params );
+               return call_user_func_array( [ $this->getContext(), 'msg' ], $params );
        }
 
        /**