diff options
Diffstat (limited to 'includes/ProtectionForm.php')
-rw-r--r-- | includes/ProtectionForm.php | 62 |
1 files changed, 36 insertions, 26 deletions
diff --git a/includes/ProtectionForm.php b/includes/ProtectionForm.php index ce0e36b0..d7b88400 100644 --- a/includes/ProtectionForm.php +++ b/includes/ProtectionForm.php @@ -63,7 +63,7 @@ class ProtectionForm { $this->mArticle = $article; $this->mTitle = $article->getTitle(); $this->mApplicableTypes = $this->mTitle->getRestrictionTypes(); - + // Check if the form should be disabled. // If it is, the form will be available in read-only to show levels. $this->mPermErrors = $this->mTitle->getUserPermissionsErrors( 'protect', $wgUser ); @@ -139,7 +139,7 @@ class ProtectionForm { if( !$wgUser->isAllowedAny( 'protect', 'editprotected' ) ) continue; } else { - if( !$wgUser->isAllowed($val) ) + if( !$wgUser->isAllowed( $val ) ) continue; } $this->mRestrictions[$action] = $val; @@ -201,12 +201,13 @@ class ProtectionForm { /** * Show the input form with optional error message * - * @param $err String: error message or null if there's no error + * @param string $err error message or null if there's no error */ function show( $err = null ) { global $wgOut; $wgOut->setRobotPolicy( 'noindex,nofollow' ); + $wgOut->addBacklinkSubtitle( $this->mTitle ); if ( is_array( $err ) ) { $wgOut->wrapWikiMsg( "<p class='error'>\n$1\n</p>\n", $err ); @@ -214,15 +215,27 @@ class ProtectionForm { $wgOut->addHTML( "<p class='error'>{$err}</p>\n" ); } + if ( $this->mTitle->getRestrictionTypes() === array() ) { + // No restriction types available for the current title + // this might happen if an extension alters the available types + $wgOut->setPageTitle( wfMessage( 'protect-norestrictiontypes-title', $this->mTitle->getPrefixedText() ) ); + $wgOut->addWikiText( wfMessage( 'protect-norestrictiontypes-text' )->text() ); + + // Show the log in case protection was possible once + $this->showLogExtract( $wgOut ); + // return as there isn't anything else we can do + return; + } + list( $cascadeSources, /* $restrictions */ ) = $this->mTitle->getCascadeProtectionSources(); - if ( $cascadeSources && count($cascadeSources) > 0 ) { + if ( $cascadeSources && count( $cascadeSources ) > 0 ) { $titles = ''; foreach ( $cascadeSources as $title ) { $titles .= '* [[:' . $title->getPrefixedText() . "]]\n"; } - $wgOut->wrapWikiMsg( "<div id=\"mw-protect-cascadeon\">\n$1\n" . $titles . "</div>", array( 'protect-cascadeon', count($cascadeSources) ) ); + $wgOut->wrapWikiMsg( "<div id=\"mw-protect-cascadeon\">\n$1\n" . $titles . "</div>", array( 'protect-cascadeon', count( $cascadeSources ) ) ); } # Show an appropriate message if the user isn't allowed or able to change @@ -236,7 +249,6 @@ class ProtectionForm { wfEscapeWikiText( $this->mTitle->getPrefixedText() ) ); } - $wgOut->addBacklinkSubtitle( $this->mTitle ); $wgOut->addHTML( $this->buildForm() ); $this->showLogExtract( $wgOut ); } @@ -272,7 +284,7 @@ class ProtectionForm { $expiry = array(); foreach( $this->mApplicableTypes as $action ) { $expiry[$action] = $this->getExpiry( $action ); - if( empty($this->mRestrictions[$action]) ) + if( empty( $this->mRestrictions[$action] ) ) continue; // unprotected if ( !$expiry[$action] ) { $this->show( array( 'protect_expiry_invalid' ) ); @@ -286,12 +298,10 @@ class ProtectionForm { # They shouldn't be able to do this anyway, but just to make sure, ensure that cascading restrictions aren't being applied # to a semi-protected page. - global $wgGroupPermissions; - $edit_restriction = isset( $this->mRestrictions['edit'] ) ? $this->mRestrictions['edit'] : ''; $this->mCascade = $wgRequest->getBool( 'mwProtect-cascade' ); - if ($this->mCascade && ($edit_restriction != 'protect') && - !(isset($wgGroupPermissions[$edit_restriction]['protect']) && $wgGroupPermissions[$edit_restriction]['protect'] ) ) + if ( $this->mCascade && ($edit_restriction != 'protect') && + !User::groupHasPermission( $edit_restriction, 'protect' ) ) $this->mCascade = false; $status = $this->mArticle->doUpdateRestrictions( $this->mRestrictions, $expiry, $this->mCascade, $reasonstr, $wgUser ); @@ -402,14 +412,14 @@ class ProtectionForm { wfMessage( 'protect-othertime-op' )->text(), "othertime" ) . "\n"; - foreach( explode(',', $scExpiryOptions) as $option ) { - if ( strpos($option, ":") === false ) { + foreach( explode( ',', $scExpiryOptions ) as $option ) { + if ( strpos( $option, ":" ) === false ) { $show = $value = $option; } else { - list($show, $value) = explode(":", $option); + list( $show, $value ) = explode( ":", $option ); } - $show = htmlspecialchars($show); - $value = htmlspecialchars($value); + $show = htmlspecialchars( $show ); + $value = htmlspecialchars( $value ); $expiryFormOptions .= Xml::option( $show, $value, $this->mExpirySelection[$action] === $value ) . "\n"; } # Add expiry dropdown @@ -448,7 +458,7 @@ class ProtectionForm { "</td></tr>"; } # Give extensions a chance to add items to the form - wfRunHooks( 'ProtectionForm::buildForm', array($this->mArticle,&$out) ); + wfRunHooks( 'ProtectionForm::buildForm', array( $this->mArticle, &$out ) ); $out .= Xml::closeElement( 'tbody' ) . Xml::closeElement( 'table' ); @@ -472,7 +482,7 @@ class ProtectionForm { # Add manual and custom reason field/selects as well as submit if( !$this->disabled ) { - $out .= Xml::openElement( 'table', array( 'id' => 'mw-protect-table3' ) ) . + $out .= Xml::openElement( 'table', array( 'id' => 'mw-protect-table3' ) ) . Xml::openElement( 'tbody' ); $out .= " <tr> @@ -503,7 +513,7 @@ class ProtectionForm { <td class='mw-input'>" . Xml::checkLabel( wfMessage( 'watchthis' )->text(), 'mwProtectWatch', 'mwProtectWatch', - $this->mTitle->userIsWatching() || $wgUser->getOption( 'watchdefault' ) ) . + $wgUser->isWatched( $this->mTitle ) || $wgUser->getOption( 'watchdefault' ) ) . "</td> </tr>"; } @@ -544,8 +554,8 @@ class ProtectionForm { /** * Build protection level selector * - * @param $action String: action to protect - * @param $selected String: current protection level + * @param string $action action to protect + * @param string $selected current protection level * @return String: HTML fragment */ function buildSelector( $action, $selected ) { @@ -559,7 +569,7 @@ class ProtectionForm { if( !$wgUser->isAllowedAny( 'protect', 'editprotected' ) && !$this->disabled ) continue; } else { - if( !$wgUser->isAllowed($key) && !$this->disabled ) + if( !$wgUser->isAllowed( $key ) && !$this->disabled ) continue; } $levels[] = $key; @@ -584,7 +594,7 @@ class ProtectionForm { /** * Prepare the label for a protection selector option * - * @param $permission String: permission required + * @param string $permission permission required * @return String */ private function getOptionLabel( $permission ) { @@ -600,11 +610,11 @@ class ProtectionForm { } function buildCleanupScript() { - global $wgRestrictionLevels, $wgGroupPermissions, $wgOut; + global $wgRestrictionLevels, $wgOut; $cascadeableLevels = array(); foreach( $wgRestrictionLevels as $key ) { - if ( ( isset( $wgGroupPermissions[$key]['protect'] ) && $wgGroupPermissions[$key]['protect'] ) + if ( User::groupHasPermission( $key, 'protect' ) || $key == 'protect' ) { $cascadeableLevels[] = $key; @@ -634,6 +644,6 @@ class ProtectionForm { $out->addHTML( Xml::element( 'h2', null, $protectLogPage->getName()->text() ) ); LogEventsList::showLogExtract( $out, 'protect', $this->mTitle ); # Let extensions add other relevant log extracts - wfRunHooks( 'ProtectionForm::showLogExtract', array($this->mArticle,$out) ); + wfRunHooks( 'ProtectionForm::showLogExtract', array( $this->mArticle, $out ) ); } } |