$this->enableApiEditOverride = $enableOverride;
}
- function submit() {
+ /**
+ * @deprecated since 1.29, call edit directly
+ */
+ public function submit() {
$this->edit();
}
* is made and all is well do we actually save and redirect to
* the newly-edited page.
*/
- function edit() {
+ public function edit() {
global $wgOut, $wgRequest, $wgUser;
// Allow extensions to modify/prevent this form or submission
if ( !Hooks::run( 'AlternateEdit', [ $this ] ) ) {
* @param WebRequest $request
* @throws ErrorPageError
*/
- function importFormData( &$request ) {
+ public function importFormData( &$request ) {
global $wgContLang, $wgUser;
# Section edit can come from either the form or a link
* Called on the first invocation, e.g. when a user clicks an edit link
* @return bool If the requested section is valid
*/
- function initialiseForm() {
+ public function initialiseForm() {
global $wgUser;
$this->edittime = $this->page->getTimestamp();
$this->editRevId = $this->page->getLatest();
* @return bool
* @private
*/
- function tokenOk( &$request ) {
+ public function tokenOk( &$request ) {
global $wgUser;
$token = $request->getVal( 'wpEditToken' );
$this->mTokenOk = $wgUser->matchEditToken( $token );
*/
protected function runPostMergeFilters( Content $content, Status $status, User $user ) {
// Run old style post-section-merge edit filter
- if ( !ContentHandler::runLegacyHooks( 'EditFilterMerged',
- [ $this, $content, &$this->hookError, $this->summary ],
- '1.21'
- ) ) {
- # Error messages etc. could be handled within the hook...
- $status->fatal( 'hookaborted' );
- $status->value = self::AS_HOOK_ERROR;
- return false;
- } elseif ( $this->hookError != '' ) {
+ if ( $this->hookError != '' ) {
# ...or the hook could be expecting us to produce an error
$status->fatal( 'hookaborted' );
$status->value = self::AS_HOOK_ERROR_EXPECTED;
* AS_BLOCKED_PAGE_FOR_USER. All that stuff needs to be cleaned up some
* time.
*/
- function internalAttemptSave( &$result, $bot = false ) {
+ public function internalAttemptSave( &$result, $bot = false ) {
global $wgUser, $wgRequest, $wgParser, $wgMaxArticleSize;
global $wgContentHandlerUseDB;
* one might think of X as the "base revision", which is NOT what this returns.
* @return Revision Current version when the edit was started
*/
- function getBaseRevision() {
+ public function getBaseRevision() {
if ( !$this->mBaseRevision ) {
$db = wfGetDB( DB_MASTER );
$this->mBaseRevision = $this->editRevId
return false;
}
- function setHeaders() {
+ public function setHeaders() {
global $wgOut, $wgUser, $wgAjaxEditStash, $wgCookieSetOnAutoblock;
$wgOut->addModules( 'mediawiki.action.edit' );
* The $formCallback parameter is deprecated since MediaWiki 1.25. Please
* use the EditPage::showEditForm:fields hook instead.
*/
- function showEditForm( $formCallback = null ) {
+ public function showEditForm( $formCallback = null ) {
global $wgOut, $wgUser;
# need to parse the preview early so that we know which templates are used,
* @param Title[] $templates
* @return string HTML
*/
- protected function makeTemplatesOnThisPageList( array $templates ) {
+ public function makeTemplatesOnThisPageList( array $templates ) {
$templateListFormatter = new TemplatesOnThisPageFormatter(
$this->context, MediaWikiServices::getInstance()->getLinkRenderer()
);
*
* @return array An array in the format [ $label, $input ]
*/
- function getSummaryInput( $summary = "", $labelText = null,
+ public function getSummaryInput( $summary = "", $labelText = null,
$inputAttrs = null, $spanLabelAttrs = null
) {
// Note: the maxlength is overridden in JS to 255 and to make it use UTF-8 bytes, not characters.
*/
protected function showPreview( $text ) {
global $wgOut;
- if ( $this->mTitle->getNamespace() == NS_CATEGORY ) {
+ 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 );
- if ( $this->mTitle->getNamespace() == NS_CATEGORY ) {
+ if ( $this->mArticle instanceof CategoryPage ) {
$this->mArticle->closeShowCategory();
}
}
* If this is a section edit, we'll replace the section as for final
* save and then make a comparison.
*/
- function showDiff() {
+ public function showDiff() {
global $wgUser, $wgContLang, $wgOut;
$oldtitlemsg = 'currentrev';
// Avoid PHP 7.1 warning of passing $this by reference
$editPage = $this;
if ( Hooks::run( 'EditPageBeforeConflictDiff', [ &$editPage, &$wgOut ] ) ) {
- $stats = MediaWikiServices::getInstance()->getStatsdDataFactory();
- $stats->increment( 'edit.failures.conflict' );
- // Only include 'standard' namespaces to avoid creating unknown numbers of statsd metrics
- if (
- $this->mTitle->getNamespace() >= NS_MAIN &&
- $this->mTitle->getNamespace() <= NS_CATEGORY_TALK
- ) {
- $stats->increment( 'edit.failures.conflict.byNamespaceId.' . $this->mTitle->getNamespace() );
- }
+ $this->incrementConflictStats();
$wgOut->wrapWikiMsg( '<h2>$1</h2>', "yourdiff" );
}
}
+ private function incrementConflictStats() {
+ $stats = MediaWikiServices::getInstance()->getStatsdDataFactory();
+ $stats->increment( 'edit.failures.conflict' );
+ // Only include 'standard' namespaces to avoid creating unknown numbers of statsd metrics
+ if (
+ $this->mTitle->getNamespace() >= NS_MAIN &&
+ $this->mTitle->getNamespace() <= NS_CATEGORY_TALK
+ ) {
+ $stats->increment( 'edit.failures.conflict.byNamespaceId.' . $this->mTitle->getNamespace() );
+ }
+ }
+
/**
* @return string
*/
public function getCancelLink() {
$cancelParams = [];
+ $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
if ( !$this->isConflict && $this->oldid > 0 ) {
$cancelParams['oldid'] = $this->oldid;
} elseif ( $this->getContextTitle()->isRedirect() ) {
}
$attrs = [ 'id' => 'mw-editform-cancel' ];
- return Linker::linkKnown(
+ return $linkRenderer->makeKnownLink(
$this->getContextTitle(),
- $this->context->msg( 'cancel' )->parse(),
+ new HtmlArmor( $this->context->msg( 'cancel' )->parse() ),
Html::buttonAttributes( $attrs, [ 'mw-ui-quiet' ] ),
$cancelParams
);
* @throws MWException
* @return string
*/
- function getPreviewText() {
+ public function getPreviewText() {
global $wgOut, $wgRawHtml, $wgLang;
global $wgAllowUserCss, $wgAllowUserJs;
- $stats = MediaWikiServices::getInstance()->getStatsdDataFactory();
-
if ( $wgRawHtml && !$this->mTokenOk ) {
// Could be an offsite preview attempt. This is very unsafe if
// HTML is enabled, as it could be an attack.
$this->context->msg( 'session_fail_preview_html' )->text() . "</div>",
true, /* interface */true );
}
- $stats->increment( 'edit.failures.session_loss' );
+ $this->incrementEditFailureStats( 'session_loss' );
return $parsedNote;
}
if ( $this->mTriedSave && !$this->mTokenOk ) {
if ( $this->mTokenOkExceptSuffix ) {
$note = $this->context->msg( 'token_suffix_mismatch' )->plain();
- $stats->increment( 'edit.failures.bad_token' );
+ $this->incrementEditFailureStats( 'bad_token' );
} else {
$note = $this->context->msg( 'session_fail_preview' )->plain();
- $stats->increment( 'edit.failures.session_loss' );
+ $this->incrementEditFailureStats( 'session_loss' );
}
} elseif ( $this->incompleteForm ) {
$note = $this->context->msg( 'edit_form_incomplete' )->plain();
if ( $this->mTriedSave ) {
- $stats->increment( 'edit.failures.incomplete_form' );
+ $this->incrementEditFailureStats( 'incomplete_form' );
}
} else {
$note = $this->context->msg( 'previewnote' )->plain() . ' ' . $continueEditing;
}
$hook_args = [ $this, &$content ];
- ContentHandler::runLegacyHooks( 'EditPageGetPreviewText', $hook_args, '1.25' );
Hooks::run( 'EditPageGetPreviewContent', $hook_args );
$parserResult = $this->doPreviewParse( $content );
return $previewhead . $previewHTML . $this->previewTextAfterContent;
}
+ private function incrementEditFailureStats( $failureType ) {
+ $stats = MediaWikiServices::getInstance()->getStatsdDataFactory();
+ $stats->increment( 'edit.failures.' . $failureType );
+ }
+
/**
* Get parser options for a preview
* @return ParserOptions
/**
* @return array
*/
- function getTemplates() {
+ public function getTemplates() {
if ( $this->preview || $this->section != '' ) {
$templates = [];
if ( !isset( $this->mParserOutput ) ) {
* @param Title $title Title object for the page being edited (optional)
* @return string
*/
- static function getEditToolbar( $title = null ) {
+ public static function getEditToolbar( $title = null ) {
global $wgContLang, $wgOut;
global $wgEnableUploads, $wgForeignFileRepos;
* Creates a basic error page which informs the user that
* they have attempted to edit a nonexistent section.
*/
- function noSuchSectionPage() {
+ public function noSuchSectionPage() {
global $wgOut;
$wgOut->prepareErrorPage( $this->context->msg( 'nosuchsectiontitle' ) );
$attribs = $customAttribs + [
'accesskey' => ',',
'id' => $name,
- 'cols' => $user->getIntOption( 'cols' ),
- 'rows' => $user->getIntOption( 'rows' ),
+ 'cols' => 80,
+ 'rows' => 25,
// Avoid PHP notices when appending preferences
// (appending allows customAttribs['style'] to still work).
'style' => ''