From: Kunal Mehta Date: Tue, 5 Sep 2017 05:52:46 +0000 (-0700) Subject: EditPage: Don't use $wgOut X-Git-Tag: 1.31.0-rc.0~2214^2 X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=commitdiff_plain;h=aaea7898582842d24adaf1838c6e3c2dfd59c245 EditPage: Don't use $wgOut Use $this->context->getOutput() instead everywhere, except in one static function, that will be dealt with later. For the most part OutputPage is a singleton, so this should affect very little. Bug: T144366 Change-Id: I59699a47e55f281284c5e96676cfe7bc0c499e28 --- diff --git a/includes/EditPage.php b/includes/EditPage.php index d1e9435b8d..eb1b6ad862 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -526,7 +526,7 @@ class EditPage { * the newly-edited page. */ public function edit() { - global $wgOut, $wgRequest, $wgUser; + global $wgRequest, $wgUser; // Allow extensions to modify/prevent this form or submission if ( !Hooks::run( 'AlternateEdit', [ $this ] ) ) { return; @@ -536,7 +536,7 @@ class EditPage { // If they used redlink=1 and the page exists, redirect to the main article if ( $wgRequest->getBool( 'redlink' ) && $this->mTitle->exists() ) { - $wgOut->redirect( $this->mTitle->getFullURL() ); + $this->context->getOutput()->redirect( $this->mTitle->getFullURL() ); return; } @@ -701,13 +701,14 @@ class EditPage { * @throws PermissionsError */ protected function displayPermissionsError( array $permErrors ) { - global $wgRequest, $wgOut; + global $wgRequest; + $out = $this->context->getOutput(); if ( $wgRequest->getBool( 'redlink' ) ) { // The edit page was reached via a red link. // Redirect to the article page and let them click the edit tab if // they really want a permission error. - $wgOut->redirect( $this->mTitle->getFullURL() ); + $out->redirect( $this->mTitle->getFullURL() ); return; } @@ -722,7 +723,7 @@ class EditPage { $this->displayViewSourcePage( $content, - $wgOut->formatPermissionsErrorMessage( $permErrors, 'edit' ) + $out->formatPermissionsErrorMessage( $permErrors, 'edit' ) ); } @@ -732,29 +733,28 @@ class EditPage { * @param string $errorMessage additional wikitext error message to display */ protected function displayViewSourcePage( Content $content, $errorMessage = '' ) { - global $wgOut; - - Hooks::run( 'EditPage::showReadOnlyForm:initial', [ $this, &$wgOut ] ); + $out = $this->context->getOutput(); + Hooks::run( 'EditPage::showReadOnlyForm:initial', [ $this, &$out ] ); - $wgOut->setRobotPolicy( 'noindex,nofollow' ); - $wgOut->setPageTitle( $this->context->msg( + $out->setRobotPolicy( 'noindex,nofollow' ); + $out->setPageTitle( $this->context->msg( 'viewsource-title', $this->getContextTitle()->getPrefixedText() ) ); - $wgOut->addBacklinkSubtitle( $this->getContextTitle() ); - $wgOut->addHTML( $this->editFormPageTop ); - $wgOut->addHTML( $this->editFormTextTop ); + $out->addBacklinkSubtitle( $this->getContextTitle() ); + $out->addHTML( $this->editFormPageTop ); + $out->addHTML( $this->editFormTextTop ); if ( $errorMessage !== '' ) { - $wgOut->addWikiText( $errorMessage ); - $wgOut->addHTML( "
\n" ); + $out->addWikiText( $errorMessage ); + $out->addHTML( "
\n" ); } # If the user made changes, preserve them when showing the markup # (This happens when a user is blocked during edit, for instance) if ( !$this->firsttime ) { $text = $this->textbox1; - $wgOut->addWikiMsg( 'viewyourtext' ); + $out->addWikiMsg( 'viewyourtext' ); } else { try { $text = $this->toEditText( $content ); @@ -763,20 +763,20 @@ class EditPage { # (e.g. for an old revision with a different model) $text = $content->serialize(); } - $wgOut->addWikiMsg( 'viewsourcetext' ); + $out->addWikiMsg( 'viewsourcetext' ); } - $wgOut->addHTML( $this->editFormTextBeforeContent ); + $out->addHTML( $this->editFormTextBeforeContent ); $this->showTextbox( $text, 'wpTextbox1', [ 'readonly' ] ); - $wgOut->addHTML( $this->editFormTextAfterContent ); + $out->addHTML( $this->editFormTextAfterContent ); - $wgOut->addHTML( $this->makeTemplatesOnThisPageList( $this->getTemplates() ) ); + $out->addHTML( $this->makeTemplatesOnThisPageList( $this->getTemplates() ) ); - $wgOut->addModules( 'mediawiki.action.edit.collapsibleFooter' ); + $out->addModules( 'mediawiki.action.edit.collapsibleFooter' ); - $wgOut->addHTML( $this->editFormTextBottom ); + $out->addHTML( $this->editFormTextBottom ); if ( $this->mTitle->exists() ) { - $wgOut->returnToMain( null, $this->mTitle ); + $out->returnToMain( null, $this->mTitle ); } } @@ -1123,7 +1123,7 @@ class EditPage { * @since 1.21 */ protected function getContentObject( $def_content = null ) { - global $wgOut, $wgRequest, $wgUser, $wgContLang; + global $wgRequest, $wgUser, $wgContLang; $content = false; @@ -1231,9 +1231,10 @@ class EditPage { $undoMsg = 'norev'; } + $out = $this->context->getOutput(); // Messages: undo-success, undo-failure, undo-norev, undo-nochange $class = ( $undoMsg == 'success' ? '' : 'error ' ) . "mw-undo-{$undoMsg}"; - $this->editFormPageTop .= $wgOut->parse( "
" . + $this->editFormPageTop .= $out->parse( "
" . $this->context->msg( 'undo-' . $undoMsg )->plain() . '
', true, /* interface */true ); } @@ -1506,7 +1507,7 @@ class EditPage { * @return bool False, if output is done, true if rest of the form should be displayed */ private function handleStatus( Status $status, $resultDetails ) { - global $wgUser, $wgOut; + global $wgUser; /** * @todo FIXME: once the interface for internalAttemptSave() is made @@ -1523,6 +1524,8 @@ class EditPage { } } + $out = $this->context->getOutput(); + // "wpExtraQueryRedirect" is a hidden input to modify // after save URL and is not used by actual edit form $request = RequestContext::getMain()->getRequest(); @@ -1546,7 +1549,7 @@ class EditPage { case self::AS_CANNOT_USE_CUSTOM_MODEL: case self::AS_PARSE_ERROR: - $wgOut->addWikiText( '
' . "\n" . $status->getWikiText() . '
' ); + $out->addWikiText( '
' . "\n" . $status->getWikiText() . '
' ); return true; case self::AS_SUCCESS_NEW_ARTICLE: @@ -1559,7 +1562,7 @@ class EditPage { } } $anchor = isset( $resultDetails['sectionanchor'] ) ? $resultDetails['sectionanchor'] : ''; - $wgOut->redirect( $this->mTitle->getFullURL( $query ) . $anchor ); + $out->redirect( $this->mTitle->getFullURL( $query ) . $anchor ); return false; case self::AS_SUCCESS_UPDATE: @@ -1587,7 +1590,7 @@ class EditPage { } } - $wgOut->redirect( $this->mTitle->getFullURL( $extraQuery ) . $sectionanchor ); + $out->redirect( $this->mTitle->getFullURL( $extraQuery ) . $sectionanchor ); return false; case self::AS_SPAM_ERROR: @@ -2342,29 +2345,31 @@ class EditPage { } public function setHeaders() { - global $wgOut, $wgUser, $wgAjaxEditStash; + global $wgUser, $wgAjaxEditStash; + + $out = $this->context->getOutput(); - $wgOut->addModules( 'mediawiki.action.edit' ); - $wgOut->addModuleStyles( 'mediawiki.action.edit.styles' ); + $out->addModules( 'mediawiki.action.edit' ); + $out->addModuleStyles( 'mediawiki.action.edit.styles' ); if ( $wgUser->getOption( 'showtoolbar' ) ) { // The addition of default buttons is handled by getEditToolbar() which // has its own dependency on this module. The call here ensures the module // is loaded in time (it has position "top") for other modules to register // buttons (e.g. extensions, gadgets, user scripts). - $wgOut->addModules( 'mediawiki.toolbar' ); + $out->addModules( 'mediawiki.toolbar' ); } if ( $wgUser->getOption( 'uselivepreview' ) ) { - $wgOut->addModules( 'mediawiki.action.edit.preview' ); + $out->addModules( 'mediawiki.action.edit.preview' ); } if ( $wgUser->getOption( 'useeditwarning' ) ) { - $wgOut->addModules( 'mediawiki.action.edit.editWarning' ); + $out->addModules( 'mediawiki.action.edit.editWarning' ); } # Enabled article-related sidebar, toplinks, etc. - $wgOut->setArticleRelated( true ); + $out->setArticleRelated( true ); $contextTitle = $this->getContextTitle(); if ( $this->isConflict ) { @@ -2387,10 +2392,10 @@ class EditPage { if ( $displayTitle === false ) { $displayTitle = $contextTitle->getPrefixedText(); } - $wgOut->setPageTitle( $this->context->msg( $msg, $displayTitle ) ); + $out->setPageTitle( $this->context->msg( $msg, $displayTitle ) ); # Transmit the name of the message to JavaScript for live preview # Keep Resources.php/mediawiki.action.edit.preview in sync with the possible keys - $wgOut->addJsConfigVars( [ + $out->addJsConfigVars( [ 'wgEditMessage' => $msg, 'wgAjaxEditStash' => $wgAjaxEditStash, ] ); @@ -2400,16 +2405,17 @@ class EditPage { * Show all applicable editing introductions */ protected function showIntro() { - global $wgOut, $wgUser; + global $wgUser; if ( $this->suppressIntro ) { return; } + $out = $this->context->getOutput(); $namespace = $this->mTitle->getNamespace(); if ( $namespace == NS_MEDIAWIKI ) { # Show a warning if editing an interface message - $wgOut->wrapWikiMsg( "
\n$1\n
", 'editinginterface' ); + $out->wrapWikiMsg( "
\n$1\n
", 'editinginterface' ); # If this is a default message (but not css or js), # show a hint that it is translatable on translatewiki.net if ( !$this->mTitle->hasContentModel( CONTENT_MODEL_CSS ) @@ -2417,7 +2423,7 @@ class EditPage { ) { $defaultMessageText = $this->mTitle->getDefaultMessageText(); if ( $defaultMessageText !== false ) { - $wgOut->wrapWikiMsg( "
\n$1\n
", + $out->wrapWikiMsg( "
\n$1\n
", 'translateinterface' ); } } @@ -2429,11 +2435,11 @@ class EditPage { # there must be a description url to show a hint to shared repo if ( $descUrl ) { if ( !$this->mTitle->exists() ) { - $wgOut->wrapWikiMsg( "
\n$1\n
", [ + $out->wrapWikiMsg( "
\n$1\n
", [ 'sharedupload-desc-create', $file->getRepo()->getDisplayName(), $descUrl ] ); } else { - $wgOut->wrapWikiMsg( "
\n$1\n
", [ + $out->wrapWikiMsg( "
\n$1\n
", [ 'sharedupload-desc-edit', $file->getRepo()->getDisplayName(), $descUrl ] ); } @@ -2449,12 +2455,12 @@ class EditPage { $ip = User::isIP( $username ); $block = Block::newFromTarget( $user, $user ); if ( !( $user && $user->isLoggedIn() ) && !$ip ) { # User does not exist - $wgOut->wrapWikiMsg( "
\n$1\n
", + $out->wrapWikiMsg( "
\n$1\n
", [ 'userpage-userdoesnotexist', wfEscapeWikiText( $username ) ] ); } elseif ( !is_null( $block ) && $block->getType() != Block::TYPE_AUTO ) { # Show log extract if the user is currently blocked LogEventsList::showLogExtract( - $wgOut, + $out, 'block', MWNamespace::getCanonicalName( NS_USER ) . ':' . $block->getTarget(), '', @@ -2475,7 +2481,7 @@ class EditPage { $this->context->msg( 'helppage' )->inContentLanguage()->text() ) ); if ( $wgUser->isLoggedIn() ) { - $wgOut->wrapWikiMsg( + $out->wrapWikiMsg( // Suppress the external link icon, consider the help url an internal one "
\n$1\n
", [ @@ -2484,7 +2490,7 @@ class EditPage { ] ); } else { - $wgOut->wrapWikiMsg( + $out->wrapWikiMsg( // Suppress the external link icon, consider the help url an internal one "
\n$1\n
", [ @@ -2498,7 +2504,7 @@ class EditPage { if ( !$this->mTitle->exists() ) { $dbr = wfGetDB( DB_REPLICA ); - LogEventsList::showLogExtract( $wgOut, [ 'delete', 'move' ], $this->mTitle, + LogEventsList::showLogExtract( $out, [ 'delete', 'move' ], $this->mTitle, '', [ 'lim' => 10, @@ -2519,9 +2525,8 @@ class EditPage { if ( $this->editintro ) { $title = Title::newFromText( $this->editintro ); if ( $title instanceof Title && $title->exists() && $title->userCan( 'read' ) ) { - global $wgOut; // Added using template syntax, to take 's into account. - $wgOut->addWikiTextTitleTidy( + $this->context->getOutput()->addWikiTextTitleTidy( '
{{:' . $title->getFullText() . '}}
', $this->mTitle ); @@ -2593,7 +2598,7 @@ class EditPage { } /** - * Send the edit form and related headers to $wgOut + * Send the edit form and related headers to OutputPage * @param callable|null $formCallback That takes an OutputPage parameter; will be called * during form output near the top, for captchas and the like. * @@ -2601,7 +2606,7 @@ class EditPage { * use the EditPage::showEditForm:fields hook instead. */ public function showEditForm( $formCallback = null ) { - global $wgOut, $wgUser; + global $wgUser; # need to parse the preview early so that we know which templates are used, # otherwise users with "show preview after edit box" will get a blank list @@ -2612,9 +2617,11 @@ class EditPage { $previewOutput = $this->getPreviewText(); } + $out = $this->context->getOutput(); + // Avoid PHP 7.1 warning of passing $this by reference $editPage = $this; - Hooks::run( 'EditPage::showEditForm:initial', [ &$editPage, &$wgOut ] ); + Hooks::run( 'EditPage::showEditForm:initial', [ &$editPage, &$out ] ); $this->setHeaders(); @@ -2627,19 +2634,19 @@ class EditPage { // We use $this->section to much before this and getVal('wgSection') directly in other places // at this point we can't reset $this->section to '' to fallback to non-section editing. // Someone is welcome to try refactoring though - $wgOut->showErrorPage( 'sectioneditnotsupported-title', 'sectioneditnotsupported-text' ); + $out->showErrorPage( 'sectioneditnotsupported-title', 'sectioneditnotsupported-text' ); return; } $this->showHeader(); - $wgOut->addHTML( $this->editFormPageTop ); + $out->addHTML( $this->editFormPageTop ); if ( $wgUser->getOption( 'previewontop' ) ) { $this->displayPreviewArea( $previewOutput, true ); } - $wgOut->addHTML( $this->editFormTextTop ); + $out->addHTML( $this->editFormTextTop ); $showToolbar = true; if ( $this->wasDeletedSinceLastEdit() ) { @@ -2648,14 +2655,14 @@ class EditPage { // Add an confirmation checkbox and explanation. $showToolbar = false; } else { - $wgOut->wrapWikiMsg( "
\n$1\n
", + $out->wrapWikiMsg( "
\n$1\n
", 'deletedwhileediting' ); } } // @todo add EditForm plugin interface and use it here! // search for textarea1 and textarea2, and allow EditForm to override all uses. - $wgOut->addHTML( Html::openElement( + $out->addHTML( Html::openElement( 'form', [ 'class' => 'mw-editform', @@ -2669,11 +2676,11 @@ class EditPage { if ( is_callable( $formCallback ) ) { wfWarn( 'The $formCallback parameter to ' . __METHOD__ . 'is deprecated' ); - call_user_func_array( $formCallback, [ &$wgOut ] ); + call_user_func_array( $formCallback, [ &$out ] ); } // Add an empty field to trip up spambots - $wgOut->addHTML( + $out->addHTML( Xml::openElement( 'div', [ 'id' => 'antispam-container', 'style' => 'display: none;' ] ) . Html::rawElement( 'label', @@ -2694,7 +2701,7 @@ class EditPage { // Avoid PHP 7.1 warning of passing $this by reference $editPage = $this; - Hooks::run( 'EditPage::showEditForm:fields', [ &$editPage, &$wgOut ] ); + Hooks::run( 'EditPage::showEditForm:fields', [ &$editPage, &$out ] ); // Put these up at the top to ensure they aren't lost on early form submission $this->showFormBeforeText(); @@ -2708,7 +2715,7 @@ class EditPage { $key = $comment === '' ? 'confirmrecreate-noreason' : 'confirmrecreate'; - $wgOut->addHTML( + $out->addHTML( '
' . $this->context->msg( $key, $username, "$comment" )->parse() . Xml::checkLabel( $this->context->msg( 'recreate' )->text(), 'wpRecreate', 'wpRecreate', false, @@ -2720,7 +2727,7 @@ class EditPage { # When the summary is hidden, also hide them on preview/show changes if ( $this->nosummary ) { - $wgOut->addHTML( Html::hidden( 'nosummary', true ) ); + $out->addHTML( Html::hidden( 'nosummary', true ) ); } # If a blank edit summary was previously provided, and the appropriate @@ -2731,15 +2738,15 @@ class EditPage { # For a bit more sophisticated detection of blank summaries, hash the # automatic one and pass that in the hidden field wpAutoSummary. if ( $this->missingSummary || ( $this->section == 'new' && $this->nosummary ) ) { - $wgOut->addHTML( Html::hidden( 'wpIgnoreBlankSummary', true ) ); + $out->addHTML( Html::hidden( 'wpIgnoreBlankSummary', true ) ); } if ( $this->undidRev ) { - $wgOut->addHTML( Html::hidden( 'wpUndidRevision', $this->undidRev ) ); + $out->addHTML( Html::hidden( 'wpUndidRevision', $this->undidRev ) ); } if ( $this->selfRedirect ) { - $wgOut->addHTML( Html::hidden( 'wpIgnoreSelfRedirect', true ) ); + $out->addHTML( Html::hidden( 'wpIgnoreSelfRedirect', true ) ); } if ( $this->hasPresetSummary ) { @@ -2750,29 +2757,29 @@ class EditPage { } $autosumm = $this->autoSumm ? $this->autoSumm : md5( $this->summary ); - $wgOut->addHTML( Html::hidden( 'wpAutoSummary', $autosumm ) ); + $out->addHTML( Html::hidden( 'wpAutoSummary', $autosumm ) ); - $wgOut->addHTML( Html::hidden( 'oldid', $this->oldid ) ); - $wgOut->addHTML( Html::hidden( 'parentRevId', $this->getParentRevId() ) ); + $out->addHTML( Html::hidden( 'oldid', $this->oldid ) ); + $out->addHTML( Html::hidden( 'parentRevId', $this->getParentRevId() ) ); - $wgOut->addHTML( Html::hidden( 'format', $this->contentFormat ) ); - $wgOut->addHTML( Html::hidden( 'model', $this->contentModel ) ); + $out->addHTML( Html::hidden( 'format', $this->contentFormat ) ); + $out->addHTML( Html::hidden( 'model', $this->contentModel ) ); - $wgOut->enableOOUI(); + $out->enableOOUI(); if ( $this->section == 'new' ) { $this->showSummaryInput( true, $this->summary ); - $wgOut->addHTML( $this->getSummaryPreview( true, $this->summary ) ); + $out->addHTML( $this->getSummaryPreview( true, $this->summary ) ); } - $wgOut->addHTML( $this->editFormTextBeforeContent ); + $out->addHTML( $this->editFormTextBeforeContent ); if ( !$this->isCssJsSubpage && $showToolbar && $wgUser->getOption( 'showtoolbar' ) ) { - $wgOut->addHTML( self::getEditToolbar( $this->mTitle ) ); + $out->addHTML( self::getEditToolbar( $this->mTitle ) ); } if ( $this->blankArticle ) { - $wgOut->addHTML( Html::hidden( 'wpIgnoreBlankArticle', true ) ); + $out->addHTML( Html::hidden( 'wpIgnoreBlankArticle', true ) ); } if ( $this->isConflict ) { @@ -2790,7 +2797,7 @@ class EditPage { $this->showContentForm(); } - $wgOut->addHTML( $this->editFormTextAfterContent ); + $out->addHTML( $this->editFormTextAfterContent ); $this->showStandardInputs(); @@ -2800,17 +2807,17 @@ class EditPage { $this->showEditTools(); - $wgOut->addHTML( $this->editFormTextAfterTools . "\n" ); + $out->addHTML( $this->editFormTextAfterTools . "\n" ); - $wgOut->addHTML( $this->makeTemplatesOnThisPageList( $this->getTemplates() ) ); + $out->addHTML( $this->makeTemplatesOnThisPageList( $this->getTemplates() ) ); - $wgOut->addHTML( Html::rawElement( 'div', [ 'class' => 'hiddencats' ], + $out->addHTML( Html::rawElement( 'div', [ 'class' => 'hiddencats' ], Linker::formatHiddenCategories( $this->page->getHiddenCategories() ) ) ); - $wgOut->addHTML( Html::rawElement( 'div', [ 'class' => 'limitreport' ], + $out->addHTML( Html::rawElement( 'div', [ 'class' => 'limitreport' ], self::getPreviewLimitReport( $this->mParserOutput ) ) ); - $wgOut->addModules( 'mediawiki.action.edit.collapsibleFooter' ); + $out->addModules( 'mediawiki.action.edit.collapsibleFooter' ); if ( $this->isConflict ) { try { @@ -2823,7 +2830,7 @@ class EditPage { $this->contentFormat, $ex->getMessage() ); - $wgOut->addWikiText( '
' . $msg->text() . '
' ); + $out->addWikiText( '
' . $msg->text() . '
' ); } } @@ -2837,12 +2844,12 @@ class EditPage { } else { $mode = 'text'; } - $wgOut->addHTML( Html::hidden( 'mode', $mode, [ 'id' => 'mw-edit-mode' ] ) ); + $out->addHTML( Html::hidden( 'mode', $mode, [ 'id' => 'mw-edit-mode' ] ) ); // Marker for detecting truncated form data. This must be the last // parameter sent in order to be of use, so do not move me. - $wgOut->addHTML( Html::hidden( 'wpUltimateParam', true ) ); - $wgOut->addHTML( $this->editFormTextBottom . "\n\n" ); + $out->addHTML( Html::hidden( 'wpUltimateParam', true ) ); + $out->addHTML( $this->editFormTextBottom . "\n\n" ); if ( !$wgUser->getOption( 'previewontop' ) ) { $this->displayPreviewArea( $previewOutput, false ); @@ -2891,11 +2898,12 @@ class EditPage { } protected function showHeader() { - global $wgOut, $wgUser; + global $wgUser; global $wgAllowUserCss, $wgAllowUserJs; + $out = $this->context->getOutput(); if ( $this->isConflict ) { - $this->addExplainConflictHeader( $wgOut ); + $this->addExplainConflictHeader( $out ); $this->editRevId = $this->page->getLatest(); } else { if ( $this->section != '' && $this->section != 'new' ) { @@ -2910,43 +2918,43 @@ class EditPage { $buttonLabel = $this->context->msg( $this->getSaveButtonLabel() )->text(); if ( $this->missingComment ) { - $wgOut->wrapWikiMsg( "
\n$1\n
", 'missingcommenttext' ); + $out->wrapWikiMsg( "
\n$1\n
", 'missingcommenttext' ); } if ( $this->missingSummary && $this->section != 'new' ) { - $wgOut->wrapWikiMsg( + $out->wrapWikiMsg( "
\n$1\n
", [ 'missingsummary', $buttonLabel ] ); } if ( $this->missingSummary && $this->section == 'new' ) { - $wgOut->wrapWikiMsg( + $out->wrapWikiMsg( "
\n$1\n
", [ 'missingcommentheader', $buttonLabel ] ); } if ( $this->blankArticle ) { - $wgOut->wrapWikiMsg( + $out->wrapWikiMsg( "
\n$1\n
", [ 'blankarticle', $buttonLabel ] ); } if ( $this->selfRedirect ) { - $wgOut->wrapWikiMsg( + $out->wrapWikiMsg( "
\n$1\n
", [ 'selfredirect', $buttonLabel ] ); } if ( $this->hookError !== '' ) { - $wgOut->addWikiText( $this->hookError ); + $out->addWikiText( $this->hookError ); } if ( !$this->checkUnicodeCompliantBrowser() ) { - $wgOut->addWikiMsg( 'nonunicodebrowser' ); + $out->addWikiMsg( 'nonunicodebrowser' ); } if ( $this->section != 'new' ) { @@ -2955,12 +2963,12 @@ class EditPage { // Let sysop know that this will make private content public if saved if ( !$revision->userCan( Revision::DELETED_TEXT, $wgUser ) ) { - $wgOut->wrapWikiMsg( + $out->wrapWikiMsg( "\n", 'rev-deleted-text-permission' ); } elseif ( $revision->isDeleted( Revision::DELETED_TEXT ) ) { - $wgOut->wrapWikiMsg( + $out->wrapWikiMsg( "\n", 'rev-deleted-text-view' ); @@ -2968,26 +2976,26 @@ class EditPage { if ( !$revision->isCurrent() ) { $this->mArticle->setOldSubtitle( $revision->getId() ); - $wgOut->addWikiMsg( 'editingold' ); + $out->addWikiMsg( 'editingold' ); $this->isOldRev = true; } } elseif ( $this->mTitle->exists() ) { // Something went wrong - $wgOut->wrapWikiMsg( "
\n$1\n
\n", + $out->wrapWikiMsg( "
\n$1\n
\n", [ 'missing-revision', $this->oldid ] ); } } } if ( wfReadOnly() ) { - $wgOut->wrapWikiMsg( + $out->wrapWikiMsg( "
\n$1\n
", [ 'readonlywarning', wfReadOnlyReason() ] ); } elseif ( $wgUser->isAnon() ) { if ( $this->formtype != 'preview' ) { - $wgOut->wrapWikiMsg( + $out->wrapWikiMsg( "
\n$1\n
", [ 'anoneditwarning', // Log-in link @@ -3001,7 +3009,7 @@ class EditPage { ] ); } else { - $wgOut->wrapWikiMsg( "
\n$1
", + $out->wrapWikiMsg( "
\n$1
", 'anonpreviewwarning' ); } @@ -3009,25 +3017,25 @@ class EditPage { if ( $this->isCssJsSubpage ) { # Check the skin exists if ( $this->isWrongCaseCssJsPage ) { - $wgOut->wrapWikiMsg( + $out->wrapWikiMsg( "
\n$1\n
", [ 'userinvalidcssjstitle', $this->mTitle->getSkinFromCssJsSubpage() ] ); } if ( $this->getTitle()->isSubpageOf( $wgUser->getUserPage() ) ) { - $wgOut->wrapWikiMsg( '
$1
', + $out->wrapWikiMsg( '
$1
', $this->isCssSubpage ? 'usercssispublic' : 'userjsispublic' ); if ( $this->formtype !== 'preview' ) { if ( $this->isCssSubpage && $wgAllowUserCss ) { - $wgOut->wrapWikiMsg( + $out->wrapWikiMsg( "
\n$1\n
", [ 'usercssyoucanpreview' ] ); } if ( $this->isJsSubpage && $wgAllowUserJs ) { - $wgOut->wrapWikiMsg( + $out->wrapWikiMsg( "
\n$1\n
", [ 'userjsyoucanpreview' ] ); @@ -3163,8 +3171,6 @@ class EditPage { * @param string $summary The text of the summary to display */ protected function showSummaryInput( $isSubjectPreview, $summary = "" ) { - global $wgOut; - # Add a class if 'missingsummary' is triggered to allow styling of the summary line $summaryClass = $this->missingSummary ? 'mw-summarymissed' : 'mw-summary'; if ( $isSubjectPreview ) { @@ -3178,7 +3184,7 @@ class EditPage { } $labelText = $this->context->msg( $isSubjectPreview ? 'subject' : 'summary' )->parse(); - $wgOut->addHTML( $this->getSummaryInputWidget( + $this->context->getOutput()->addHTML( $this->getSummaryInputWidget( $summary, $labelText, [ 'class' => $summaryClass ] @@ -3215,21 +3221,20 @@ class EditPage { } protected function showFormBeforeText() { - global $wgOut; - - $wgOut->addHTML( Html::hidden( 'wpSection', htmlspecialchars( $this->section ) ) ); - $wgOut->addHTML( Html::hidden( 'wpStarttime', $this->starttime ) ); - $wgOut->addHTML( Html::hidden( 'wpEdittime', $this->edittime ) ); - $wgOut->addHTML( Html::hidden( 'editRevId', $this->editRevId ) ); - $wgOut->addHTML( Html::hidden( 'wpScrolltop', $this->scrolltop, [ 'id' => 'wpScrolltop' ] ) ); + $out = $this->context->getOutput(); + $out->addHTML( Html::hidden( 'wpSection', htmlspecialchars( $this->section ) ) ); + $out->addHTML( Html::hidden( 'wpStarttime', $this->starttime ) ); + $out->addHTML( Html::hidden( 'wpEdittime', $this->edittime ) ); + $out->addHTML( Html::hidden( 'editRevId', $this->editRevId ) ); + $out->addHTML( Html::hidden( 'wpScrolltop', $this->scrolltop, [ 'id' => 'wpScrolltop' ] ) ); if ( !$this->checkUnicodeCompliantBrowser() ) { - $wgOut->addHTML( Html::hidden( 'safemode', '1' ) ); + $out->addHTML( Html::hidden( 'safemode', '1' ) ); } } protected function showFormAfterText() { - global $wgOut, $wgUser; + global $wgUser; /** * To make it harder for someone to slip a user a page * which submits an edit form to the wiki without their @@ -3242,7 +3247,9 @@ class EditPage { * include the constant suffix to prevent editing from * broken text-mangling proxies. */ - $wgOut->addHTML( "\n" . Html::hidden( "wpEditToken", $wgUser->getEditToken() ) . "\n" ); + $this->context->getOutput()->addHTML( + "\n" . Html::hidden( "wpEditToken", $wgUser->getEditToken() ) . "\n" + ); } /** @@ -3316,18 +3323,17 @@ class EditPage { } protected function showTextbox( $text, $name, $customAttribs = [] ) { - global $wgOut, $wgUser; + global $wgUser; $wikitext = $this->safeUnicodeOutput( $text ); $wikitext = $this->addNewLineAtEnd( $wikitext ); $attribs = $this->buildTextboxAttribs( $name, $customAttribs, $wgUser ); - $wgOut->addHTML( Html::textarea( $name, $wikitext, $attribs ) ); + $this->context->getOutput()->addHTML( Html::textarea( $name, $wikitext, $attribs ) ); } protected function displayPreviewArea( $previewOutput, $isOnTop = false ) { - global $wgOut; $classes = []; if ( $isOnTop ) { $classes[] = 'ontop'; @@ -3339,7 +3345,8 @@ class EditPage { $attribs['style'] = 'display: none;'; } - $wgOut->addHTML( Xml::openElement( 'div', $attribs ) ); + $out = $this->context->getOutput(); + $out->addHTML( Xml::openElement( 'div', $attribs ) ); if ( $this->formtype == 'preview' ) { $this->showPreview( $previewOutput ); @@ -3348,10 +3355,10 @@ class EditPage { $pageViewLang = $this->mTitle->getPageViewLanguage(); $attribs = [ 'lang' => $pageViewLang->getHtmlCode(), 'dir' => $pageViewLang->getDir(), 'class' => 'mw-content-' . $pageViewLang->getDir() ]; - $wgOut->addHTML( Html::rawElement( 'div', $attribs ) ); + $out->addHTML( Html::rawElement( 'div', $attribs ) ); } - $wgOut->addHTML( '
' ); + $out->addHTML( '
' ); if ( $this->formtype == 'diff' ) { try { @@ -3363,26 +3370,26 @@ class EditPage { $this->contentFormat, $ex->getMessage() ); - $wgOut->addWikiText( '
' . $msg->text() . '
' ); + $out->addWikiText( '
' . $msg->text() . '
' ); } } } /** - * Append preview output to $wgOut. + * Append preview output to OutputPage. * Includes category rendering if this is a category page. * * @param string $text The HTML to be output for the preview. */ protected function showPreview( $text ) { - global $wgOut; if ( $this->mArticle instanceof CategoryPage ) { $this->mArticle->openShowCategory(); } # This hook seems slightly odd here, but makes things more # consistent for extensions. - Hooks::run( 'OutputPageBeforeHTML', [ &$wgOut, &$text ] ); - $wgOut->addHTML( $text ); + $out = $this->context->getOutput(); + Hooks::run( 'OutputPageBeforeHTML', [ &$out, &$text ] ); + $out->addHTML( $text ); if ( $this->mArticle instanceof CategoryPage ) { $this->mArticle->closeShowCategory(); } @@ -3396,7 +3403,7 @@ class EditPage { * save and then make a comparison. */ public function showDiff() { - global $wgUser, $wgContLang, $wgOut; + global $wgUser, $wgContLang; $oldtitlemsg = 'currentrev'; # if message does not exist, show diff against the preloaded default @@ -3451,7 +3458,7 @@ class EditPage { $difftext = ''; } - $wgOut->addHTML( '
' . $difftext . '
' ); + $this->context->getOutput()->addHTML( '
' . $difftext . '
' ); } /** @@ -3460,8 +3467,7 @@ class EditPage { protected function showHeaderCopyrightWarning() { $msg = 'editpage-head-copy-warn'; if ( !$this->context->msg( $msg )->isDisabled() ) { - global $wgOut; - $wgOut->wrapWikiMsg( "
\n$1\n
", + $this->context->getOutput()->wrapWikiMsg( "
\n$1\n
", 'editpage-head-copy-warn' ); } } @@ -3478,10 +3484,10 @@ class EditPage { $msg = 'editpage-tos-summary'; Hooks::run( 'EditPageTosSummary', [ $this->mTitle, &$msg ] ); if ( !$this->context->msg( $msg )->isDisabled() ) { - global $wgOut; - $wgOut->addHTML( '
' ); - $wgOut->addWikiMsg( $msg ); - $wgOut->addHTML( '
' ); + $out = $this->context->getOutput(); + $out->addHTML( '
' ); + $out->addWikiMsg( $msg ); + $out->addHTML( '
' ); } } @@ -3490,8 +3496,7 @@ class EditPage { * characters not present on most keyboards for copying/pasting. */ protected function showEditTools() { - global $wgOut; - $wgOut->addHTML( '
' . + $this->context->getOutput()->addHTML( '
' . $this->context->msg( 'edittools' )->inContentLanguage()->parse() . '
' ); } @@ -3585,12 +3590,12 @@ class EditPage { } protected function showStandardInputs( &$tabindex = 2 ) { - global $wgOut; - $wgOut->addHTML( "
\n" ); + $out = $this->context->getOutput(); + $out->addHTML( "
\n" ); if ( $this->section != 'new' ) { $this->showSummaryInput( false, $this->summary ); - $wgOut->addHTML( $this->getSummaryPreview( false, $this->summary ) ); + $out->addHTML( $this->getSummaryPreview( false, $this->summary ) ); } $checkboxes = $this->getCheckboxesWidget( @@ -3599,14 +3604,14 @@ class EditPage { ); $checkboxesHTML = new OOUI\HorizontalLayout( [ 'items' => $checkboxes ] ); - $wgOut->addHTML( "
" . $checkboxesHTML . "
\n" ); + $out->addHTML( "
" . $checkboxesHTML . "
\n" ); // Show copyright warning. - $wgOut->addWikiText( $this->getCopywarn() ); - $wgOut->addHTML( $this->editFormTextAfterWarn ); + $out->addWikiText( $this->getCopywarn() ); + $out->addHTML( $this->editFormTextAfterWarn ); - $wgOut->addHTML( "
\n" ); - $wgOut->addHTML( implode( $this->getEditButtons( $tabindex ), "\n" ) . "\n" ); + $out->addHTML( "
\n" ); + $out->addHTML( implode( $this->getEditButtons( $tabindex ), "\n" ) . "\n" ); $cancel = $this->getCancelLink(); if ( $cancel !== '' ) { @@ -3626,13 +3631,13 @@ class EditPage { $this->context->msg( 'word-separator' )->escaped() . $this->context->msg( 'newwindow' )->parse(); - $wgOut->addHTML( " {$cancel}\n" ); - $wgOut->addHTML( " {$edithelp}\n" ); - $wgOut->addHTML( "
\n" ); + $out->addHTML( " {$cancel}\n" ); + $out->addHTML( " {$edithelp}\n" ); + $out->addHTML( "
\n" ); - Hooks::run( 'EditPage::showStandardInputs:options', [ $this, $wgOut, &$tabindex ] ); + Hooks::run( 'EditPage::showStandardInputs:options', [ $this, $out, &$tabindex ] ); - $wgOut->addHTML( "
\n" ); + $out->addHTML( "
\n" ); } /** @@ -3640,14 +3645,13 @@ class EditPage { * If you want to use another entry point to this function, be careful. */ protected function showConflict() { - global $wgOut; - + $out = $this->context->getOutput(); // Avoid PHP 7.1 warning of passing $this by reference $editPage = $this; - if ( Hooks::run( 'EditPageBeforeConflictDiff', [ &$editPage, &$wgOut ] ) ) { + if ( Hooks::run( 'EditPageBeforeConflictDiff', [ &$editPage, &$out ] ) ) { $this->incrementConflictStats(); - $wgOut->wrapWikiMsg( '

$1

', "yourdiff" ); + $out->wrapWikiMsg( '

$1

', "yourdiff" ); $content1 = $this->toEditContent( $this->textbox1 ); $content2 = $this->toEditContent( $this->textbox2 ); @@ -3660,7 +3664,7 @@ class EditPage { $this->context->msg( 'storedversion' )->text() ); - $wgOut->wrapWikiMsg( '

$1

', "yourtext" ); + $out->wrapWikiMsg( '

$1

', "yourtext" ); $this->showTextbox2(); } } @@ -3790,9 +3794,11 @@ class EditPage { * @return string */ public function getPreviewText() { - global $wgOut, $wgRawHtml, $wgLang; + global $wgRawHtml, $wgLang; global $wgAllowUserCss, $wgAllowUserJs; + $out = $this->context->getOutput(); + if ( $wgRawHtml && !$this->mTokenOk ) { // Could be an offsite preview attempt. This is very unsafe if // HTML is enabled, as it could be an attack. @@ -3801,7 +3807,7 @@ class EditPage { // Do not put big scary notice, if previewing the empty // string, which happens when you initially edit // a category page, due to automatic preview-on-open. - $parsedNote = $wgOut->parse( "
" . + $parsedNote = $out->parse( "
" . $this->context->msg( 'session_fail_preview_html' )->text() . "
", true, /* interface */true ); } @@ -3889,7 +3895,7 @@ class EditPage { $parserOutput = $parserResult['parserOutput']; $previewHTML = $parserResult['html']; $this->mParserOutput = $parserOutput; - $wgOut->addParserOutputMetadata( $parserOutput ); + $out->addParserOutputMetadata( $parserOutput ); if ( count( $parserOutput->getWarnings() ) ) { $note .= "\n\n" . implode( "\n\n", $parserOutput->getWarnings() ); @@ -3915,7 +3921,7 @@ class EditPage { $previewhead = "
\n" . '

' . $this->context->msg( 'preview' )->escaped() . "

" . - $wgOut->parse( $note, true, /* interface */true ) . $conflict . "
\n"; + $out->parse( $note, true, /* interface */true ) . $conflict . "
\n"; $pageViewLang = $this->mTitle->getPageViewLanguage(); $attribs = [ 'lang' => $pageViewLang->getHtmlCode(), 'dir' => $pageViewLang->getDir(), @@ -4423,18 +4429,17 @@ class EditPage { * they have attempted to edit a nonexistent section. */ public function noSuchSectionPage() { - global $wgOut; - - $wgOut->prepareErrorPage( $this->context->msg( 'nosuchsectiontitle' ) ); + $out = $this->context->getOutput(); + $out->prepareErrorPage( $this->context->msg( 'nosuchsectiontitle' ) ); $res = $this->context->msg( 'nosuchsectiontext', $this->section )->parseAsBlock(); // Avoid PHP 7.1 warning of passing $this by reference $editPage = $this; Hooks::run( 'EditPageNoSuchSection', [ &$editPage, &$res ] ); - $wgOut->addHTML( $res ); + $out->addHTML( $res ); - $wgOut->returnToMain( false, $this->mTitle ); + $out->returnToMain( false, $this->mTitle ); } /** @@ -4443,28 +4448,29 @@ class EditPage { * @param string|array|bool $match Text (or array of texts) which triggered one or more filters */ public function spamPageWithContent( $match = false ) { - global $wgOut, $wgLang; + global $wgLang; $this->textbox2 = $this->textbox1; if ( is_array( $match ) ) { $match = $wgLang->listToText( $match ); } - $wgOut->prepareErrorPage( $this->context->msg( 'spamprotectiontitle' ) ); + $out = $this->context->getOutput(); + $out->prepareErrorPage( $this->context->msg( 'spamprotectiontitle' ) ); - $wgOut->addHTML( '
' ); - $wgOut->addWikiMsg( 'spamprotectiontext' ); + $out->addHTML( '
' ); + $out->addWikiMsg( 'spamprotectiontext' ); if ( $match ) { - $wgOut->addWikiMsg( 'spamprotectionmatch', wfEscapeWikiText( $match ) ); + $out->addWikiMsg( 'spamprotectionmatch', wfEscapeWikiText( $match ) ); } - $wgOut->addHTML( '
' ); + $out->addHTML( '
' ); - $wgOut->wrapWikiMsg( '

$1

', "yourdiff" ); + $out->wrapWikiMsg( '

$1

', "yourdiff" ); $this->showDiff(); - $wgOut->wrapWikiMsg( '

$1

', "yourtext" ); + $out->wrapWikiMsg( '

$1

', "yourtext" ); $this->showTextbox2(); - $wgOut->addReturnTo( $this->getContextTitle(), [ 'action' => 'edit' ] ); + $out->addReturnTo( $this->getContextTitle(), [ 'action' => 'edit' ] ); } /** @@ -4605,15 +4611,14 @@ class EditPage { * @since 1.29 */ protected function addEditNotices() { - global $wgOut; - + $out = $this->context->getOutput(); $editNotices = $this->mTitle->getEditNotices( $this->oldid ); if ( count( $editNotices ) ) { - $wgOut->addHTML( implode( "\n", $editNotices ) ); + $out->addHTML( implode( "\n", $editNotices ) ); } else { $msg = $this->context->msg( 'editnotice-notext' ); if ( !$msg->isDisabled() ) { - $wgOut->addHTML( + $out->addHTML( '
' . $msg->parseAsBlock() . '
' @@ -4626,10 +4631,8 @@ class EditPage { * @since 1.29 */ protected function addTalkPageText() { - global $wgOut; - if ( $this->mTitle->isTalkPage() ) { - $wgOut->addWikiMsg( 'talkpagetext' ); + $this->context->getOutput()->addWikiMsg( 'talkpagetext' ); } } @@ -4637,14 +4640,15 @@ class EditPage { * @since 1.29 */ protected function addLongPageWarningHeader() { - global $wgMaxArticleSize, $wgOut, $wgLang; + global $wgMaxArticleSize, $wgLang; if ( $this->contentLength === false ) { $this->contentLength = strlen( $this->textbox1 ); } + $out = $this->context->getOutput(); if ( $this->tooBig || $this->contentLength > $wgMaxArticleSize * 1024 ) { - $wgOut->wrapWikiMsg( "
\n$1\n
", + $out->wrapWikiMsg( "
\n$1\n
", [ 'longpageerror', $wgLang->formatNum( round( $this->contentLength / 1024, 3 ) ), @@ -4653,7 +4657,7 @@ class EditPage { ); } else { if ( !$this->context->msg( 'longpage-hint' )->isDisabled() ) { - $wgOut->wrapWikiMsg( "
\n$1\n
", + $out->wrapWikiMsg( "
\n$1\n
", [ 'longpage-hint', $wgLang->formatSize( strlen( $this->textbox1 ) ), @@ -4668,8 +4672,7 @@ class EditPage { * @since 1.29 */ protected function addPageProtectionWarningHeaders() { - global $wgOut; - + $out = $this->context->getOutput(); if ( $this->mTitle->isProtected( 'edit' ) && MWNamespace::getRestrictionLevels( $this->mTitle->getNamespace() ) !== [ '' ] ) { @@ -4680,7 +4683,7 @@ class EditPage { # Then it must be protected based on static groups (regular) $noticeMsg = 'protectedpagewarning'; } - LogEventsList::showLogExtract( $wgOut, 'protect', $this->mTitle, '', + LogEventsList::showLogExtract( $out, 'protect', $this->mTitle, '', [ 'lim' => 1, 'msgKey' => [ $noticeMsg ] ] ); } if ( $this->mTitle->isCascadeProtected() ) { @@ -4696,10 +4699,10 @@ class EditPage { } } $notice .= '
'; - $wgOut->wrapWikiMsg( $notice, [ 'cascadeprotectedwarning', $cascadeSourcesCount ] ); + $out->wrapWikiMsg( $notice, [ 'cascadeprotectedwarning', $cascadeSourcesCount ] ); } if ( !$this->mTitle->exists() && $this->mTitle->getRestrictions( 'create' ) ) { - LogEventsList::showLogExtract( $wgOut, 'protect', $this->mTitle, '', + LogEventsList::showLogExtract( $out, 'protect', $this->mTitle, '', [ 'lim' => 1, 'showIfEmpty' => false, 'msgKey' => [ 'titleprotectedwarning' ],