[EditPage] Move AS_* status constants to a new interface

Interface is @internal and is implemented by EditPage; will be used in
the future when the backend is split and common status values are needed
for the different classes.

Doing separately to avoid cluttering the main work - just moves the
constant definitions. Since EditPage implements the new interface, any
existing EditPage::AS_* references will continue to work.

Bug: T20654
Change-Id: I71dafec2579b4a42dd08f3fc7e569e28c14d8753
This commit is contained in:
DannyS712 2020-05-20 02:27:49 +00:00 committed by dannys712-main
parent 84390e9887
commit 615b880051
3 changed files with 145 additions and 145 deletions

View file

@ -22,6 +22,7 @@
use MediaWiki\Block\DatabaseBlock;
use MediaWiki\Content\IContentHandlerFactory;
use MediaWiki\EditPage\IEditObject;
use MediaWiki\EditPage\TextboxBuilder;
use MediaWiki\EditPage\TextConflictHelper;
use MediaWiki\HookContainer\ProtectedHookAccessorTrait;
@ -49,7 +50,7 @@ use Wikimedia\ScopedCallback;
* Surgeon General's Warning: prolonged exposure to this class is known to cause
* headaches, which may be fatal.
*/
class EditPage {
class EditPage implements IEditObject {
use DeprecationHelper;
use ProtectedHookAccessorTrait;
@ -58,150 +59,6 @@ class EditPage {
*/
public const UNICODE_CHECK = 'ℳ𝒲♥𝓊𝓃𝒾𝒸ℴ𝒹ℯ';
/**
* Status: Article successfully updated
*/
public const AS_SUCCESS_UPDATE = 200;
/**
* Status: Article successfully created
*/
public const AS_SUCCESS_NEW_ARTICLE = 201;
/**
* Status: Article update aborted by a hook function
*/
public const AS_HOOK_ERROR = 210;
/**
* Status: A hook function returned an error
*/
public const AS_HOOK_ERROR_EXPECTED = 212;
/**
* Status: User is blocked from editing this page
*/
public const AS_BLOCKED_PAGE_FOR_USER = 215;
/**
* Status: Content too big (> $wgMaxArticleSize)
*/
public const AS_CONTENT_TOO_BIG = 216;
/**
* Status: this anonymous user is not allowed to edit this page
*/
public const AS_READ_ONLY_PAGE_ANON = 218;
/**
* Status: this logged in user is not allowed to edit this page
*/
public const AS_READ_ONLY_PAGE_LOGGED = 219;
/**
* Status: wiki is in readonly mode (wfReadOnly() == true)
*/
public const AS_READ_ONLY_PAGE = 220;
/**
* Status: rate limiter for action 'edit' was tripped
*/
public const AS_RATE_LIMITED = 221;
/**
* Status: article was deleted while editing and param wpRecreate == false or form
* was not posted
*/
public const AS_ARTICLE_WAS_DELETED = 222;
/**
* Status: user tried to create this page, but is not allowed to do that
* ( Title->userCan('create') == false )
*/
public const AS_NO_CREATE_PERMISSION = 223;
/**
* Status: user tried to create a blank page and wpIgnoreBlankArticle == false
*/
public const AS_BLANK_ARTICLE = 224;
/**
* Status: (non-resolvable) edit conflict
*/
public const AS_CONFLICT_DETECTED = 225;
/**
* Status: no edit summary given and the user has forceeditsummary set and the user is not
* editing in his own userspace or talkspace and wpIgnoreBlankSummary == false
*/
public const AS_SUMMARY_NEEDED = 226;
/**
* Status: user tried to create a new section without content
*/
public const AS_TEXTBOX_EMPTY = 228;
/**
* Status: article is too big (> $wgMaxArticleSize), after merging in the new section
*/
public const AS_MAX_ARTICLE_SIZE_EXCEEDED = 229;
/**
* Status: WikiPage::doEdit() was unsuccessful
*/
public const AS_END = 231;
/**
* Status: summary contained spam according to one of the regexes in $wgSummarySpamRegex
*/
public const AS_SPAM_ERROR = 232;
/**
* Status: anonymous user is not allowed to upload (User::isAllowed('upload') == false)
*/
public const AS_IMAGE_REDIRECT_ANON = 233;
/**
* Status: logged in user is not allowed to upload (User::isAllowed('upload') == false)
*/
public const AS_IMAGE_REDIRECT_LOGGED = 234;
/**
* Status: user tried to modify the content model, but is not allowed to do that
* ( User::isAllowed('editcontentmodel') == false )
*/
public const AS_NO_CHANGE_CONTENT_MODEL = 235;
/**
* Status: user tried to create self-redirect (redirect to the same article) and
* wpIgnoreSelfRedirect == false
*/
public const AS_SELF_REDIRECT = 236;
/**
* Status: an error relating to change tagging. Look at the message key for
* more details
*/
public const AS_CHANGE_TAG_ERROR = 237;
/**
* Status: can't parse content
*/
public const AS_PARSE_ERROR = 240;
/**
* Status: when changing the content model is disallowed due to
* $wgContentHandlerUseDB being false
*
* @deprecated since 1.35, meaningless since $wgContentHandlerUseDB has been removed.
*/
public const AS_CANNOT_USE_CUSTOM_MODEL = 241;
/**
* Status: edit rejected because browser doesn't support Unicode.
*/
public const AS_UNICODE_NOT_SUPPORTED = 242;
/**
* HTML id and name for the beginning of the edit form.
*/

View file

@ -0,0 +1,104 @@
<?php
namespace MediaWiki\EditPage;
/**
* Serves as a common repository of constants for EditPage edit status results
*
* Each of these is a possible status value
*
* @internal
*/
interface IEditObject {
/** Status: Article successfully updated */
public const AS_SUCCESS_UPDATE = 200;
/** Status: Article successfully created */
public const AS_SUCCESS_NEW_ARTICLE = 201;
/** Status: Article update aborted by a hook function */
public const AS_HOOK_ERROR = 210;
/** Status: A hook function returned an error */
public const AS_HOOK_ERROR_EXPECTED = 212;
/** Status: User is blocked from editing this page */
public const AS_BLOCKED_PAGE_FOR_USER = 215;
/** Status: Content too big (> $wgMaxArticleSize) */
public const AS_CONTENT_TOO_BIG = 216;
/** Status: this anonymous user is not allowed to edit this page */
public const AS_READ_ONLY_PAGE_ANON = 218;
/** Status: this logged in user is not allowed to edit this page */
public const AS_READ_ONLY_PAGE_LOGGED = 219;
/** Status: wiki is in readonly mode (wfReadOnly() == true) */
public const AS_READ_ONLY_PAGE = 220;
/** Status: rate limiter for action 'edit' was tripped */
public const AS_RATE_LIMITED = 221;
/** Status: article was deleted while editing and wpRecreate == false or form was not posted */
public const AS_ARTICLE_WAS_DELETED = 222;
/** Status: user tried to create this page, but is not allowed to do that */
public const AS_NO_CREATE_PERMISSION = 223;
/** Status: user tried to create a blank page and wpIgnoreBlankArticle == false */
public const AS_BLANK_ARTICLE = 224;
/** Status: (non-resolvable) edit conflict */
public const AS_CONFLICT_DETECTED = 225;
/**
* Status: no edit summary given and the user has forceeditsummary set and the user is not
* editing in his own userspace or talkspace and wpIgnoreBlankSummary == false
*/
public const AS_SUMMARY_NEEDED = 226;
/** Status: user tried to create a new section without content */
public const AS_TEXTBOX_EMPTY = 228;
/** Status: article is too big (> $wgMaxArticleSize), after merging in the new section */
public const AS_MAX_ARTICLE_SIZE_EXCEEDED = 229;
/** Status: WikiPage::doEdit() was unsuccessful */
public const AS_END = 231;
/** Status: summary contained spam according to one of the regexes in $wgSummarySpamRegex */
public const AS_SPAM_ERROR = 232;
/** Status: anonymous user is not allowed to upload (User::isAllowed('upload') == false) */
public const AS_IMAGE_REDIRECT_ANON = 233;
/** Status: logged in user is not allowed to upload (User::isAllowed('upload') == false) */
public const AS_IMAGE_REDIRECT_LOGGED = 234;
/**
* Status: user tried to modify the content model, but is not allowed to do that
* ( User::isAllowed('editcontentmodel') == false )
*/
public const AS_NO_CHANGE_CONTENT_MODEL = 235;
/** Status: user tried to create self-redirect and wpIgnoreSelfRedirect is false */
public const AS_SELF_REDIRECT = 236;
/** Status: an error relating to change tagging. Look at the message key for more details */
public const AS_CHANGE_TAG_ERROR = 237;
/** Status: can't parse content */
public const AS_PARSE_ERROR = 240;
/**
* Status: when changing the content model is disallowed due to
* $wgContentHandlerUseDB being false
*
* @deprecated since 1.35, meaningless since $wgContentHandlerUseDB has been removed.
*/
public const AS_CANNOT_USE_CUSTOM_MODEL = 241;
/** Status: edit rejected because browser doesn't support Unicode. */
public const AS_UNICODE_NOT_SUPPORTED = 242;
}

View file

@ -0,0 +1,39 @@
<?php
use MediaWiki\EditPage\IEditObject;
/**
* @covers EditPage
*
* MediaWikiCoversValidator fails when trying to say that this covers an interface,
* but this covers \MediaWiki\EditPage\IEditObject primarily
*
* @author DannyS712
*/
class IEditObjectTest extends MediaWikiUnitTestCase {
public function testConstants() {
// Ensure that each of the constants used as a status is unique
$reflection = new ReflectionClass( IEditObject::class );
$constants = $reflection->getConstants();
// Keys (constant names) are required to be unique by php, only need to
// test the values
$values = array_values( $constants );
$uniqueValues = array_unique( $values );
$this->assertArrayEquals(
$values,
$uniqueValues,
'All status constants have unique values'
);
// Make sure that any old reference to EditPage::AS_* still works
foreach ( $constants as $key => $value ) {
$this->assertSame(
constant( EditPage::class . '::' . $key ),
$value,
"EditPage::$key still works properly"
);
}
}
}