Merge "Improve "selfmove" message's wording"
[lhc/web/wiklou.git] / includes / specials / SpecialPageLanguage.php
index db05ebe..a68f08f 100644 (file)
@@ -49,12 +49,20 @@ class SpecialPageLanguage extends FormSpecialPage {
        protected function getFormFields() {
                // Get default from the subpage of Special page
                $defaultName = $this->par;
+               $title = $defaultName ? Title::newFromText( $defaultName ) : null;
+               if ( $title ) {
+                       $defaultPageLanguage =
+                               ContentHandler::getForTitle( $title )->getPageLanguage( $title );
+                       $hasCustomLanguageSet = !$defaultPageLanguage->equals( $title->getPageLanguage() );
+               } else {
+                       $hasCustomLanguageSet = false;
+               }
 
                $page = [];
                $page['pagename'] = [
                        'type' => 'title',
                        'label-message' => 'pagelang-name',
-                       'default' => $defaultName,
+                       'default' => $title ? $title->getPrefixedText() : $defaultName,
                        'autofocus' => $defaultName === null,
                        'exists' => true,
                ];
@@ -68,7 +76,7 @@ class SpecialPageLanguage extends FormSpecialPage {
                        'id' => 'mw-pl-options',
                        'type' => 'radio',
                        'options' => $selectoptions,
-                       'default' => 1
+                       'default' => $hasCustomLanguageSet ? 2 : 1
                ];
 
                // Building a language selector
@@ -86,7 +94,9 @@ class SpecialPageLanguage extends FormSpecialPage {
                        'type' => 'select',
                        'options' => $options,
                        'label-message' => 'pagelang-language',
-                       'default' => $this->getConfig()->get( 'LanguageCode' ),
+                       'default' => $title ?
+                               $title->getPageLanguage()->getCode() :
+                               $this->getConfig()->get( 'LanguageCode' ),
                ];
 
                // Allow user to enter a comment explaining the change
@@ -135,8 +145,18 @@ class SpecialPageLanguage extends FormSpecialPage {
                        return Status::newFatal( $ex->getMessageObject() );
                }
 
+               // Check permissions and make sure the user has permission to edit the page
+               $errors = $title->getUserPermissionsErrors( 'edit', $this->getUser() );
+
+               if ( $errors ) {
+                       $out = $this->getOutput();
+                       $wikitext = $out->formatPermissionsErrorMessage( $errors );
+                       // Hack to get our wikitext parsed
+                       return Status::newFatal( new RawMessage( '$1', [ $wikitext ] ) );
+               }
+
                // Url to redirect to after the operation
-               $this->goToUrl = $title->getFullURL(
+               $this->goToUrl = $title->getFullUrlForRedirect(
                        $title->isRedirect() ? [ 'redirect' => 'no' ] : []
                );