Test only against protection for deleting

When deleting a page, only check that the user can edit through
protection, rather than running all of the other checks. This is Tim
Starling's option 3 from bug 69380.

Bug: 69380
Bug: 69398
Change-Id: I5a7c4147bd241dc086fda6c16827f9554d78599b
This commit is contained in:
Jackmcbarn 2014-08-12 11:47:01 -04:00
parent 93ddbbd998
commit 9dafa73b2f
4 changed files with 13 additions and 9 deletions

View file

@ -2258,11 +2258,15 @@ class Title {
$errors[] = array( 'immobile-target-page' );
}
} elseif ( $action == 'delete' ) {
if ( count( $this->getUserPermissionsErrorsInternal( 'edit',
$user, $doExpensiveQueries, true ) )
) {
// If they can't edit, they shouldn't delete.
$errors[] = array( 'delete-cantedit' );
$tempErrors = $this->checkPageRestrictions( 'edit',
$user, array(), $doExpensiveQueries, true );
if( !$tempErrors ) {
$tempErrors = $this->checkCascadingSourcesRestrictions( 'edit',
$user, $tempErrors, $doExpensiveQueries, true );
}
if ( $tempErrors ) {
// If protection keeps them from editing, they shouldn't be able to delete.
$errors[] = array( 'deleteprotected' );
}
if ( $doExpensiveQueries && $wgDeleteRevisionsLimit
&& !$this->userCan( 'bigdelete', $user ) && $this->isBigDeletion()

View file

@ -1411,9 +1411,9 @@ abstract class ApiBase extends ContextSource {
'code' => 'cantedit',
'info' => "You can't protect this page because you can't edit it"
),
'delete-cantedit' => array(
'deleteprotected' => array(
'code' => 'cantedit',
'info' => "You can't delete this page because you can't edit it"
'info' => "You can't delete this page because it has been protected"
),
'badaccess-group0' => array(
'code' => 'permissiondenied',

View file

@ -1876,7 +1876,7 @@
"delete-edit-reasonlist": "Edit deletion reasons",
"delete-toobig": "This page has a large edit history, over $1 {{PLURAL:$1|revision|revisions}}.\nDeletion of such pages has been restricted to prevent accidental disruption of {{SITENAME}}.",
"delete-warning-toobig": "This page has a large edit history, over $1 {{PLURAL:$1|revision|revisions}}.\nDeleting it may disrupt database operations of {{SITENAME}};\nproceed with caution.",
"delete-cantedit": "You cannot delete this page because you do not have permission to edit it.",
"deleteprotected": "You cannot delete this page because it has been protected.",
"deleting-backlinks-warning": "'''Warning:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Other pages]] link to or transclude the page you are about to delete.",
"rollback": "Roll back edits",
"rollback_short": "Rollback",

View file

@ -2038,7 +2038,7 @@
"delete-edit-reasonlist": "Shown beneath the page deletion form on the right side. It is a link to {{msg-mw|Deletereason-dropdown|notext=1}}.\n\nSee also:\n* {{msg-mw|Ipb-edit-dropdown}}\n* {{msg-mw|Protect-edit-reasonlist}}.\n{{Identical|Edit delete reasons}}",
"delete-toobig": "Parameters:\n* $1 - the upper limit of number of revisions\nSee also:\n* {{msg-mw|Delete-warning-toobig}}",
"delete-warning-toobig": "Parameters:\n* $1 - the upper limit of number of revisions\nSee also:\n* {{msg-mw|Delete-toobig}}",
"delete-cantedit": "Used as error message when deleting the page.",
"deleteprotected": "Used as error message when deleting the page.",
"deleting-backlinks-warning": "A warning shown when a page that is being deleted has at least one link to it or is transcluded in at least one page.",
"rollback": "{{Identical|Rollback}}",
"rollback_short": "{{Identical|Rollback}}",