Merge "Remove the fallback for create rights (covered in PM edit rights check). Remove key to i18n message, no longer being used."

This commit is contained in:
jenkins-bot 2021-06-30 15:16:39 +00:00 committed by Gerrit Code Review
commit c309a5dd25
12 changed files with 7 additions and 57 deletions

View file

@ -734,21 +734,6 @@ class EditPage implements IEditObject {
$this->mTitle, $this->mTitle,
$rigor $rigor
); );
# Can this title be created?
if ( !$this->mTitle->exists() ) {
$permErrors = array_merge(
$permErrors,
wfArrayDiff2(
$this->permManager->getPermissionErrors(
'create',
$user,
$this->mTitle,
$rigor
),
$permErrors
)
);
}
# Ignore some permissions errors when a user is just previewing/viewing diffs # Ignore some permissions errors when a user is just previewing/viewing diffs
$remove = []; $remove = [];
foreach ( $permErrors as $error ) { foreach ( $permErrors as $error ) {

View file

@ -23,10 +23,8 @@
use MediaWiki\HookContainer\ProtectedHookAccessorTrait; use MediaWiki\HookContainer\ProtectedHookAccessorTrait;
use MediaWiki\Linker\LinkTarget; use MediaWiki\Linker\LinkTarget;
use MediaWiki\MediaWikiServices; use MediaWiki\MediaWikiServices;
use MediaWiki\Page\PageIdentity;
use MediaWiki\Page\PageRecord; use MediaWiki\Page\PageRecord;
use MediaWiki\Page\PageReference; use MediaWiki\Page\PageReference;
use MediaWiki\Permissions\Authority;
use MediaWiki\Permissions\PermissionStatus; use MediaWiki\Permissions\PermissionStatus;
use MediaWiki\Session\SessionManager; use MediaWiki\Session\SessionManager;
use Wikimedia\Rdbms\IResultWrapper; use Wikimedia\Rdbms\IResultWrapper;
@ -3395,9 +3393,9 @@ class OutputPage extends ContextSource {
$vars['wgUserVariant'] = $languageConverter->getPreferredVariant(); $vars['wgUserVariant'] = $languageConverter->getPreferredVariant();
} }
// Same test as SkinTemplate // Same test as SkinTemplate
$vars['wgIsProbablyEditable'] = $this->performerCanEditOrCreate( $this->getAuthority(), $title ); $vars['wgIsProbablyEditable'] = $this->getAuthority()->probablyCan( 'edit', $title );
$vars['wgRelevantPageIsProbablyEditable'] = $relevantTitle && $vars['wgRelevantPageIsProbablyEditable'] = $relevantTitle &&
$this->performerCanEditOrCreate( $this->getAuthority(), $relevantTitle ); $this->getAuthority()->probablyCan( 'edit', $relevantTitle );
foreach ( $title->getRestrictionTypes() as $type ) { foreach ( $title->getRestrictionTypes() as $type ) {
// Following keys are set in $vars: // Following keys are set in $vars:
// wgRestrictionCreate, wgRestrictionEdit, wgRestrictionMove, wgRestrictionUpload // wgRestrictionCreate, wgRestrictionEdit, wgRestrictionMove, wgRestrictionUpload
@ -3501,19 +3499,6 @@ class OutputPage extends ContextSource {
return true; return true;
} }
/**
* @param Authority $performer
* @param PageIdentity $page
* @return bool
*/
private function performerCanEditOrCreate(
Authority $performer,
PageIdentity $page
) {
return $performer->probablyCan( 'edit', $page )
&& ( $page->exists() || $performer->probablyCan( 'create', $page ) );
}
/** /**
* @return array Array in format "link name or number => 'link html'". * @return array Array in format "link name or number => 'link html'".
*/ */
@ -3576,7 +3561,7 @@ class OutputPage extends ContextSource {
# Universal edit button # Universal edit button
if ( $config->get( 'UniversalEditButton' ) && $this->isArticleRelated() ) { if ( $config->get( 'UniversalEditButton' ) && $this->isArticleRelated() ) {
if ( $this->performerCanEditOrCreate( $this->getAuthority(), $this->getTitle() ) ) { if ( $this->getAuthority()->probablyCan( 'edit', $this->getTitle() ) ) {
// Original UniversalEditButton // Original UniversalEditButton
$msg = $this->msg( 'edit' )->text(); $msg = $this->msg( 'edit' )->text();
$tags['universal-edit-button'] = Html::element( 'link', [ $tags['universal-edit-button'] = Html::element( 'link', [

View file

@ -156,7 +156,7 @@ class ApiEditPage extends ApiBase {
// Now let's check whether we're even allowed to do this // Now let's check whether we're even allowed to do this
$this->checkTitleUserPermissions( $this->checkTitleUserPermissions(
$titleObj, $titleObj,
$titleObj->exists() ? 'edit' : [ 'edit', 'create' ], 'edit',
[ 'autoblock' => true ] [ 'autoblock' => true ]
); );

View file

@ -113,9 +113,6 @@ class ContentModelChange {
$titleWithNewContentModel->setContentModel( $this->newModel ); $titleWithNewContentModel->setContentModel( $this->newModel );
$status = PermissionStatus::newEmpty(); $status = PermissionStatus::newEmpty();
if ( !$current->exists() ) {
$authorizer( 'create', $current, $status );
}
$authorizer( 'editcontentmodel', $current, $status ); $authorizer( 'editcontentmodel', $current, $status );
$authorizer( 'edit', $current, $status ); $authorizer( 'edit', $current, $status );
$authorizer( 'editcontentmodel', $titleWithNewContentModel, $status ); $authorizer( 'editcontentmodel', $titleWithNewContentModel, $status );

View file

@ -1329,13 +1329,6 @@ class WikiImporter {
return false; return false;
} }
if ( !$title->exists() && !$this->permissionManager->userCan( 'create', $user, $title ) ) {
# Do not import if the importing wiki user cannot create this page
$this->notice( 'import-error-create', $title->getPrefixedText() );
return false;
}
} }
return [ $title, $foreignTitle ]; return [ $title, $foreignTitle ];

View file

@ -1475,8 +1475,7 @@ class Article implements Page {
$text = wfMessage( 'missing-revision', $oldid )->plain(); $text = wfMessage( 'missing-revision', $oldid )->plain();
} }
} elseif ( $this->getContext()->getAuthority()->probablyCan( 'create', $title ) && } elseif ( $this->getContext()->getAuthority()->probablyCan( 'edit', $title )
$this->getContext()->getAuthority()->probablyCan( 'edit', $title )
) { ) {
$message = $isRegistered ? 'noarticletext' : 'noarticletextanon'; $message = $isRegistered ? 'noarticletext' : 'noarticletextanon';
$text = wfMessage( $message )->plain(); $text = wfMessage( $message )->plain();

View file

@ -1048,10 +1048,7 @@ class SkinTemplate extends Skin {
} }
// Checks if user can edit the current page if it exists or create it otherwise // Checks if user can edit the current page if it exists or create it otherwise
if ( $this->getAuthority()->probablyCan( 'edit', $title ) && if ( $this->getAuthority()->probablyCan( 'edit', $title ) ) {
( $title->exists() ||
$this->getAuthority()->probablyCan( 'create', $title ) )
) {
// Builds CSS class for talk page links // Builds CSS class for talk page links
$isTalkClass = $isTalk ? ' istalk' : ''; $isTalkClass = $isTalk ? ' istalk' : '';
// Whether the user is editing the page // Whether the user is editing the page

View file

@ -594,7 +594,6 @@ class SpecialSearch extends SpecialPage {
} elseif ( } elseif (
$this->contentHandlerFactory->getContentHandler( $title->getContentModel() ) $this->contentHandlerFactory->getContentHandler( $title->getContentModel() )
->supportsDirectEditing() ->supportsDirectEditing()
&& $this->getAuthority()->probablyCan( 'create', $title )
&& $this->getAuthority()->probablyCan( 'edit', $title ) && $this->getAuthority()->probablyCan( 'edit', $title )
) { ) {
$messageName = 'searchmenu-new'; $messageName = 'searchmenu-new';

View file

@ -660,9 +660,6 @@ abstract class UploadBase {
$status = PermissionStatus::newEmpty(); $status = PermissionStatus::newEmpty();
$performer->authorizeWrite( 'edit', $nt, $status ); $performer->authorizeWrite( 'edit', $nt, $status );
$performer->authorizeWrite( 'upload', $nt, $status ); $performer->authorizeWrite( 'upload', $nt, $status );
if ( !$nt->exists() ) {
$performer->authorizeWrite( 'create', $nt, $status );
}
if ( !$status->isGood() ) { if ( !$status->isGood() ) {
return $status->toLegacyErrorArray(); return $status->toLegacyErrorArray();
} }

View file

@ -3033,7 +3033,6 @@
"import-token-mismatch": "Loss of session data.\n\nYou might have been logged out. '''Please verify that you're still logged in and try again'''.\nIf it still does not work, try [[Special:UserLogout|logging out]] and logging back in, and check that your browser allows cookies from this site.", "import-token-mismatch": "Loss of session data.\n\nYou might have been logged out. '''Please verify that you're still logged in and try again'''.\nIf it still does not work, try [[Special:UserLogout|logging out]] and logging back in, and check that your browser allows cookies from this site.",
"import-invalid-interwiki": "Cannot import from the specified wiki.", "import-invalid-interwiki": "Cannot import from the specified wiki.",
"import-error-edit": "Page \"$1\" was not imported because you are not allowed to edit it.", "import-error-edit": "Page \"$1\" was not imported because you are not allowed to edit it.",
"import-error-create": "Page \"$1\" was not imported because you are not allowed to create it.",
"import-error-interwiki": "Page \"$1\" was not imported because its name is reserved for external linking (interwiki).", "import-error-interwiki": "Page \"$1\" was not imported because its name is reserved for external linking (interwiki).",
"import-error-special": "Page \"$1\" was not imported because it belongs to a special namespace that does not allow pages.", "import-error-special": "Page \"$1\" was not imported because it belongs to a special namespace that does not allow pages.",
"import-error-invalid": "Page \"$1\" was not imported because the name to which it would be imported is invalid on this wiki.", "import-error-invalid": "Page \"$1\" was not imported because the name to which it would be imported is invalid on this wiki.",

View file

@ -3257,7 +3257,6 @@
"import-token-mismatch": "Used as error message in [[Special:Import]].\n\nSee also:\n* {{msg-mw|import-invalid-interwiki}}\n* {{msg-mw|Importunknownsource}}\n\n{{Identical|Loss of session data}}", "import-token-mismatch": "Used as error message in [[Special:Import]].\n\nSee also:\n* {{msg-mw|import-invalid-interwiki}}\n* {{msg-mw|Importunknownsource}}\n\n{{Identical|Loss of session data}}",
"import-invalid-interwiki": "Used as error message in [[Special:Import]].\n\nSee also:\n* {{msg-mw|import-token-mismatch}}\n* {{msg-mw|import-invalid-interwiki}}\n* {{msg-mw|Importunknownsource}}", "import-invalid-interwiki": "Used as error message in [[Special:Import]].\n\nSee also:\n* {{msg-mw|import-token-mismatch}}\n* {{msg-mw|import-invalid-interwiki}}\n* {{msg-mw|Importunknownsource}}",
"import-error-edit": "Import error message displayed when importing user has no edit rights for a page.\n\nParameters:\n* $1 - a page name\n{{Related|Import-error}}", "import-error-edit": "Import error message displayed when importing user has no edit rights for a page.\n\nParameters:\n* $1 - a page name\n{{Related|Import-error}}",
"import-error-create": "Import error message displayed when importing user has no create rights for a page.\n\nParameters:\n* $1 - a page name\n{{Related|Import-error}}",
"import-error-interwiki": "Used as error message when importing pages. Parameters:\n* $1 - page title\n{{Related|Import-error}}", "import-error-interwiki": "Used as error message when importing pages. Parameters:\n* $1 - page title\n{{Related|Import-error}}",
"import-error-special": "Used as error message when importing pages. Parameters:\n* $1 - page title\n{{Related|Import-error}}", "import-error-special": "Used as error message when importing pages. Parameters:\n* $1 - page title\n{{Related|Import-error}}",
"import-error-invalid": "Used as error message when importing pages. Parameters:\n* $1 - page title\n{{Related|Import-error}}", "import-error-invalid": "Used as error message when importing pages. Parameters:\n* $1 - page title\n{{Related|Import-error}}",

View file

@ -3198,7 +3198,7 @@ class OutputPageTest extends MediaWikiIntegrationTestCase {
/** /**
* @dataProvider provideGetJsVarsEditable * @dataProvider provideGetJsVarsEditable
* @covers OutputPage::performerCanEditOrCreate * @covers OutputPage::getJSVars
*/ */
public function testGetJsVarsEditable( Authority $performer, array $expectedEditableConfig ) { public function testGetJsVarsEditable( Authority $performer, array $expectedEditableConfig ) {
$op = $this->newInstance( [], null, null, $performer ); $op = $this->newInstance( [], null, null, $performer );