From 9dafa73b2f284ed570b7e4aa377115eb9271b5fc Mon Sep 17 00:00:00 2001 From: Jackmcbarn Date: Tue, 12 Aug 2014 11:47:01 -0400 Subject: [PATCH] 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 --- includes/Title.php | 14 +++++++++----- includes/api/ApiBase.php | 4 ++-- languages/i18n/en.json | 2 +- languages/i18n/qqq.json | 2 +- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/includes/Title.php b/includes/Title.php index a1b2352f5e..c73550faee 100644 --- a/includes/Title.php +++ b/includes/Title.php @@ -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() diff --git a/includes/api/ApiBase.php b/includes/api/ApiBase.php index a280ddf036..05b69bc215 100644 --- a/includes/api/ApiBase.php +++ b/includes/api/ApiBase.php @@ -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', diff --git a/languages/i18n/en.json b/languages/i18n/en.json index a43a7421a0..bbd8f7bff1 100644 --- a/languages/i18n/en.json +++ b/languages/i18n/en.json @@ -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", diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json index e135277e88..573bd34a35 100644 --- a/languages/i18n/qqq.json +++ b/languages/i18n/qqq.json @@ -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}}", -- 2.20.1