X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fspecials%2FSpecialPageLanguage.php;h=55ae69262156720e5a560f97dfe88df26617f81f;hb=6f19bac69546b8a5cc06f91a81e364bf905dee7f;hp=61b6a8cd9276e300c770de1ac440c1cb3a3c9f10;hpb=54e6096f64d0dd80ab42686828bb58d107f93d2e;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialPageLanguage.php b/includes/specials/SpecialPageLanguage.php index 61b6a8cd92..55ae692621 100644 --- a/includes/specials/SpecialPageLanguage.php +++ b/includes/specials/SpecialPageLanguage.php @@ -111,68 +111,99 @@ class SpecialPageLanguage extends FormSpecialPage { /** * * @param array $data - * @return bool + * @return Status */ public function onSubmit( array $data ) { - $title = Title::newFromText( $data['pagename'] ); + $pageName = $data['pagename']; - // Check if title is valid - if ( !$title ) { - return false; + // Check if user wants to use default language + if ( $data['selectoptions'] == 1 ) { + $newLanguage = 'default'; + } else { + $newLanguage = $data['language']; + } + + try { + $title = Title::newFromTextThrow( $pageName ); + } catch ( MalformedTitleException $ex ) { + return Status::newFatal( $ex->getMessageObject() ); } + // Url to redirect to after the operation + $this->goToUrl = $title->getFullURL(); + + return self::changePageLanguage( $this->getContext(), $title, $newLanguage ); + } + + /** + * @param IContextSource $context + * @param Title $title + * @param string $newLanguage Language code + * @param array $tags Change tags to apply to the log entry + * @return Status + */ + public static function changePageLanguage( IContextSource $context, Title $title, + $newLanguage, array $tags = [] ) { // Get the default language for the wiki - $defLang = $this->getConfig()->get( 'LanguageCode' ); + $defLang = $context->getConfig()->get( 'LanguageCode' ); $pageId = $title->getArticleID(); // Check if article exists if ( !$pageId ) { - return false; + return Status::newFatal( + 'pagelang-nonexistent-page', + wfEscapeWikiText( $title->getPrefixedText() ) + ); } // Load the page language from DB $dbw = wfGetDB( DB_MASTER ); - $langOld = $dbw->selectField( + $oldLanguage = $dbw->selectField( 'page', 'page_lang', [ 'page_id' => $pageId ], __METHOD__ ); - // Url to redirect to after the operation - $this->goToUrl = $title->getFullURL(); - - // Check if user wants to use default language - if ( $data['selectoptions'] == 1 ) { - $langNew = null; - } else { - $langNew = $data['language']; + // Check if user wants to use the default language + if ( $newLanguage === 'default' ) { + $newLanguage = null; } // No change in language - if ( $langNew === $langOld ) { - return false; + 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( + 'pagelang-unchanged-language', + wfEscapeWikiText( $title->getPrefixedText() ), + $oldLanguage + ); } // Hardcoded [def] if the language is set to null - $logOld = $langOld ? $langOld : $defLang . '[def]'; - $logNew = $langNew ? $langNew : $defLang . '[def]'; + $logOld = $oldLanguage ? $oldLanguage : $defLang . '[def]'; + $logNew = $newLanguage ? $newLanguage : $defLang . '[def]'; // Writing new page language to database - $dbw = wfGetDB( DB_MASTER ); $dbw->update( 'page', - [ 'page_lang' => $langNew ], + [ 'page_lang' => $newLanguage ], [ 'page_id' => $pageId, - 'page_lang' => $langOld + 'page_lang' => $oldLanguage ], __METHOD__ ); if ( !$dbw->affectedRows() ) { - return false; + return Status::newFatal( 'pagelang-db-failed' ); } // Logging change of language @@ -181,9 +212,10 @@ class SpecialPageLanguage extends FormSpecialPage { '5::newlanguage' => $logNew ]; $entry = new ManualLogEntry( 'pagelang', 'pagelang' ); - $entry->setPerformer( $this->getUser() ); + $entry->setPerformer( $context->getUser() ); $entry->setTarget( $title ); $entry->setParameters( $logParams ); + $entry->setTags( $tags ); $logid = $entry->insert(); $entry->publish( $logid ); @@ -191,7 +223,11 @@ class SpecialPageLanguage extends FormSpecialPage { // Force re-render so that language-based content (parser functions etc.) gets updated $title->invalidateCache(); - return true; + return Status::newGood( (object)[ + 'oldLanguage' => $logOld, + 'newLanguage' => $logNew, + 'logId' => $logid, + ] ); } public function onSuccess() {