Relax phpdoc of PermissionError to match actual usage
authorGergő Tisza <gtisza@wikimedia.org>
Fri, 14 Oct 2016 22:59:11 +0000 (22:59 +0000)
committerGergő Tisza <gtisza@wikimedia.org>
Tue, 18 Oct 2016 21:08:41 +0000 (21:08 +0000)
Also fix OutputPage::showPermissionsErrorPage to handle everything
it claims to handle.

Change-Id: I8ed4a6f2f038fe70084ab673300e24af97e935db

includes/OutputPage.php
includes/exception/PermissionsError.php

index a69c0e6..6527a0d 100644 (file)
@@ -2390,10 +2390,14 @@ class OutputPage extends ContextSource {
        /**
         * Output a standard permission error page
         *
-        * @param array $errors Error message keys
+        * @param array $errors Error message keys or [key, param...] arrays
         * @param string $action Action that was denied or null if unknown
         */
        public function showPermissionsErrorPage( array $errors, $action = null ) {
+               foreach ( $errors as $key => $error ) {
+                       $errors[$key] = (array)$error;
+               }
+
                // For some action (read, edit, create and upload), display a "login to do this action"
                // error if all of the following conditions are met:
                // 1. the user is not logged in
index bd0b120..e31374c 100644 (file)
@@ -29,12 +29,19 @@ class PermissionsError extends ErrorPageError {
        public $permission, $errors;
 
        /**
-        * @param string $permission A permission name.
-        * @param string[] $errors Error message keys
+        * @param string|null $permission A permission name or null if unknown
+        * @param array $errors Error message keys or [key, param...] arrays; must not be empty if
+        *   $permission is null
+        * @throws \InvalidArgumentException
         */
        public function __construct( $permission, $errors = [] ) {
                global $wgLang;
 
+               if ( $permission === null && !$errors ) {
+                       throw new \InvalidArgumentException( __METHOD__ .
+                               ': $permission and $errors cannot both be empty' );
+               }
+
                $this->permission = $permission;
 
                if ( !count( $errors ) ) {