Merge "phpunit: Avoid use of deprecated getMock for PHPUnit 5 compat"
[lhc/web/wiklou.git] / includes / specials / SpecialPageLanguage.php
index 55ae692..2943fd4 100644 (file)
@@ -89,6 +89,12 @@ class SpecialPageLanguage extends FormSpecialPage {
                        'default' => $this->getConfig()->get( 'LanguageCode' ),
                ];
 
+               // Allow user to enter a comment explaining the change
+               $page['reason'] = [
+                       'type' => 'text',
+                       'label-message' => 'pagelang-reason'
+               ];
+
                return $page;
        }
 
@@ -130,20 +136,28 @@ class SpecialPageLanguage extends FormSpecialPage {
                }
 
                // Url to redirect to after the operation
-               $this->goToUrl = $title->getFullURL();
+               $this->goToUrl = $title->getFullUrlForRedirect(
+                       $title->isRedirect() ? [ 'redirect' => 'no' ] : []
+               );
 
-               return self::changePageLanguage( $this->getContext(), $title, $newLanguage );
+               return self::changePageLanguage(
+                       $this->getContext(),
+                       $title,
+                       $newLanguage,
+                       $data['reason'] === null ? '' : $data['reason']
+               );
        }
 
        /**
         * @param IContextSource $context
         * @param Title $title
         * @param string $newLanguage Language code
+        * @param string $reason Reason for the change
         * @param array $tags Change tags to apply to the log entry
         * @return Status
         */
        public static function changePageLanguage( IContextSource $context, Title $title,
-               $newLanguage, array $tags = [] ) {
+               $newLanguage, $reason, array $tags = [] ) {
                // Get the default language for the wiki
                $defLang = $context->getConfig()->get( 'LanguageCode' );
 
@@ -175,10 +189,13 @@ class SpecialPageLanguage extends FormSpecialPage {
                if ( $newLanguage === $oldLanguage ) {
                        // Check if old language does not exist
                        if ( !$oldLanguage ) {
-                               return Status::newFatal(
-                                       'pagelang-unchanged-language-default',
-                                       wfEscapeWikiText( $title->getPrefixedText() )
-                               );
+                               return Status::newFatal( ApiMessage::create(
+                                       [
+                                               'pagelang-unchanged-language-default',
+                                               wfEscapeWikiText( $title->getPrefixedText() )
+                                       ],
+                                       'pagelang-unchanged-language'
+                               ) );
                        }
                        return Status::newFatal(
                                'pagelang-unchanged-language',
@@ -215,6 +232,7 @@ class SpecialPageLanguage extends FormSpecialPage {
                $entry->setPerformer( $context->getUser() );
                $entry->setTarget( $title );
                $entry->setParameters( $logParams );
+               $entry->setComment( $reason );
                $entry->setTags( $tags );
 
                $logid = $entry->insert();