diff options
Diffstat (limited to 'includes/specials/SpecialRemoveRestrictions.php')
-rw-r--r-- | includes/specials/SpecialRemoveRestrictions.php | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/includes/specials/SpecialRemoveRestrictions.php b/includes/specials/SpecialRemoveRestrictions.php new file mode 100644 index 00000000..ded6cbe3 --- /dev/null +++ b/includes/specials/SpecialRemoveRestrictions.php @@ -0,0 +1,60 @@ +<?php + +function wfSpecialRemoveRestrictions() { + global $wgOut, $wgRequest, $wgUser, $wgLang, $wgTitle; + $sk = $wgUser->getSkin(); + + $id = $wgRequest->getVal( 'id' ); + if( !is_numeric( $id ) ) { + $wgOut->addWikiMsg( 'removerestrictions-noid' ); + return; + } + + UserRestriction::purgeExpired(); + $r = UserRestriction::newFromId( $id, true ); + if( !$r ) { + $wgOut->addWikiMsg( 'removerestrictions-wrongid' ); + return; + } + + $form = array(); + $form['removerestrictions-user'] = $sk->userLink( $r->getSubjectId(), $r->getSubjectText() ) . + $sk->userToolLinks( $r->getSubjectId(), $r->getSubjectText() ); + $form['removerestrictions-type'] = UserRestriction::formatType( $r->getType() ); + if( $r->isPage() ) + $form['removerestrictions-page'] = $sk->link( $r->getPage() ); + if( $r->isNamespace() ) + $form['removerestrictions-namespace'] = $wgLang->getDisplayNsText( $r->getNamespace() ); + $form['removerestrictions-reason'] = Xml::input( 'reason' ); + + $result = null; + if( $wgRequest->wasPosted() && $wgUser->matchEditToken( $wgRequest->getVal( 'edittoken' ) ) ) + $result = wfSpecialRemoveRestrictionsProcess( $r ); + + $wgOut->addWikiMsg( 'removerestrictions-intro' ); + $wgOut->addHTML( Xml::fieldset( wfMsgHtml( 'removerestrictions-legend' ) ) ); + if( $result ) + $wgOut->addHTML( '<strong class="success">' . wfMsgExt( 'removerestrictions-success', + 'parseinline', $r->getSubjectText() ) . '</strong>' ); + $wgOut->addHTML( Xml::openElement( 'form', array( 'action' => $wgTitle->getLocalUrl( array( 'id' => $id ) ), + 'method' => 'post' ) ) ); + $wgOut->addHTML( Xml::buildForm( $form, 'removerestrictions-submit' ) ); + $wgOut->addHTML( Xml::hidden( 'id', $r->getId() ) ); + $wgOut->addHTML( Xml::hidden( 'title', $wgTitle->getPrefixedDbKey() ) ); + $wgOut->addHTML( Xml::hidden( 'edittoken', $wgUser->editToken() ) ); + $wgOut->addHTML( "</form></fieldset>" ); +} + +function wfSpecialRemoveRestrictionsProcess( $r ) { + global $wgUser, $wgRequest; + $reason = $wgRequest->getVal( 'reason' ); + $result = $r->delete(); + $log = new LogPage( 'restrict' ); + $params = array( $r->getType() ); + if( $r->isPage() ) + $params[] = $r->getPage()->getPrefixedDbKey(); + if( $r->isNamespace() ) + $params[] = $r->getNamespace(); + $log->addEntry( 'remove', Title::makeTitle( NS_USER, $r->getSubjectText() ), $reason, $params ); + return $result; +} |