Link to docs/magicword.txt
[lhc/web/wiklou.git] / includes / SpecialIpblocklist.php
index 3530642..641e1fd 100644 (file)
@@ -80,7 +80,7 @@ class IPUnblockForm {
                global $wgOut, $wgUser, $wgSysopUserBans, $wgContLang;
 
                $wgOut->setPagetitle( wfMsg( 'unblockip' ) );
-               $wgOut->addWikiText( wfMsg( 'unblockiptext' ) );
+               $wgOut->addWikiMsg( 'unblockiptext' );
 
                $ipa = wfMsgHtml( $wgSysopUserBans ? 'ipadressorusername' : 'ipaddress' );
                $ipr = wfMsgHtml( 'ipbreason' );
@@ -91,7 +91,7 @@ class IPUnblockForm {
 
                if ( "" != $err ) {
                        $wgOut->setSubtitle( wfMsg( "formerror" ) );
-                       $wgOut->addWikitext( "<span class='error'>{$err}</span>\n" );
+                       $wgOut->addWikiText( "<span class='error'>{$err}</span>\n" );
                }
                $token = htmlspecialchars( $wgUser->editToken() );
 
@@ -140,49 +140,78 @@ class IPUnblockForm {
 
        }
 
-       function doSubmit() {
-               global $wgOut;
+       const UNBLOCK_SUCCESS = 0; // Success
+       const UNBLOCK_NO_SUCH_ID = 1; // No such block ID
+       const UNBLOCK_USER_NOT_BLOCKED = 2; // IP wasn't blocked
+       const UNBLOCK_BLOCKED_AS_RANGE = 3; // IP is part of a range block
+       const UNBLOCK_UNKNOWNERR = 4; // Unknown error
 
-               if ( $this->id ) {
-                       $block = Block::newFromID( $this->id );
-                       if ( $block ) {
-                               $this->ip = $block->getRedactedName();
+       /**
+        * Backend code for unblocking. doSubmit() wraps around this.
+        * $range is only used when UNBLOCK_BLOCKED_AS_RANGE is returned, in which
+        * case it contains the range $ip is part of.
+        * @return array array(message key, parameters) on failure, empty array on success
+        */
+
+       static function doUnblock(&$id, &$ip, &$reason, &$range = null)
+       {
+               if ( $id ) {
+                       $block = Block::newFromID( $id );
+                       if ( !$block ) {
+                               return array('ipb_cant_unblock', htmlspecialchars($id));
                        }
+                       $ip = $block->getRedactedName();
                } else {
                        $block = new Block();
-                       $this->ip = trim( $this->ip );
-                       if ( substr( $this->ip, 0, 1 ) == "#" ) {
-                               $id = substr( $this->ip, 1 );
+                       $ip = trim( $ip );
+                       if ( substr( $ip, 0, 1 ) == "#" ) {
+                               $id = substr( $ip, 1 );
                                $block = Block::newFromID( $id );
+                               if( !$block ) {
+                                       return array('ipb_cant_unblock', htmlspecialchars($id));
+                               }
+                               $ip = $block->getRedactedName();
                        } else {
-                               $block = Block::newFromDB( $this->ip );
+                               $block = Block::newFromDB( $ip );
                                if ( !$block ) { 
-                                       $block = null;
+                                       return array('ipb_cant_unblock', htmlspecialchars($id));
+                               }
+                               if( $block->mRangeStart != $block->mRangeEnd
+                                               && !strstr( $ip, "/" ) ) {
+                                       /* If the specified IP is a single address, and the block is
+                                        * a range block, don't unblock the range. */
+                                        $range = $block->mAddress;
+                                        return array('ipb_blocked_as_range', $ip, $range);
                                }
                        }
                }
-               $success = false;
-               if ( $block ) {
-                       # Delete block
-                       if ( $block->delete() ) {
-                               # Make log entry
-                               $log = new LogPage( 'block' );
-                               $log->addEntry( 'unblock', Title::makeTitle( NS_USER, $this->ip ), $this->reason );
-                               $success = true;
-                       }
+               // Yes, this is really necessary
+               $id = $block->mId;
+
+               # Delete block
+               if ( !$block->delete() ) {
+                       return array('ipb_cant_unblock', htmlspecialchars($id));
                }
 
-               if ( $success ) {
-                       # Report to the user
-                       $titleObj = SpecialPage::getTitleFor( "Ipblocklist" );
-                       $success = $titleObj->getFullURL( "action=success&successip=" . urlencode( $this->ip ) );
-                       $wgOut->redirect( $success );
-               } else {
-                       if ( !$this->ip && $this->id ) {
-                               $this->ip = '#' . $this->id;
-                       }
-                       $this->showForm( wfMsg( 'ipb_cant_unblock', htmlspecialchars( $this->id ) ) );
+               # Make log entry
+               $log = new LogPage( 'block' );
+               $log->addEntry( 'unblock', Title::makeTitle( NS_USER, $ip ), $reason );
+               return array();
+       }
+
+       function doSubmit() {
+               global $wgOut;
+               $retval = self::doUnblock($this->id, $this->ip, $this->reason, $range);
+               if(!empty($retval))
+               {
+                       $key = array_shift($retval);
+                       $this->showForm(wfMsgReal($key, $retval));
+                       return;
                }
+               # Report to the user
+               $titleObj = SpecialPage::getTitleFor( "Ipblocklist" );
+               $success = $titleObj->getFullURL( "action=success&successip=" . urlencode( $this->ip ) );
+               $wgOut->redirect( $success );
        }
 
        function showList( $msg ) {
@@ -234,9 +263,9 @@ class IPUnblockForm {
                        );
                } elseif ( $this->ip != '') {
                        $wgOut->addHTML( $this->searchForm() );
-                       $wgOut->addWikiText( wfMsg( 'ipblocklist-no-results' ) );
+                       $wgOut->addWikiMsg( 'ipblocklist-no-results' );
                } else {
-                       $wgOut->addWikiText( wfMsg( 'ipblocklist-empty' ) );
+                       $wgOut->addWikiMsg( 'ipblocklist-empty' );
                }
        }
 
@@ -245,8 +274,12 @@ class IPUnblockForm {
                return
                        Xml::tags( 'form', array( 'action' => $wgScript ),
                                Xml::hidden( 'title', $wgTitle->getPrefixedDbKey() ) .
-                               Xml::input( 'ip', /*size*/ false, $this->ip ) .
-                               Xml::submitButton( wfMsg( 'ipblocklist-submit' ) )
+                               Xml::openElement( 'fieldset' ) .
+                               Xml::element( 'legend', null, wfMsg( 'ipblocklist-legend' ) ) .
+                               Xml::inputLabel( wfMsg( 'ipblocklist-username' ), 'ip', 'ip', /* size */ false, $this->ip ) .
+                               '&nbsp;' .
+                               Xml::submitButton( wfMsg( 'ipblocklist-submit' ) ) .
+                               Xml::closeElement( 'fieldset' )
                        );
        }
 
@@ -264,13 +297,12 @@ class IPUnblockForm {
                        $sk = $wgUser->getSkin();
                if( is_null( $msg ) ) {
                        $msg = array();
-                       $keys = array( 'infiniteblock', 'expiringblock', 'contribslink', 'unblocklink', 
+                       $keys = array( 'infiniteblock', 'expiringblock', 'unblocklink',
                                'anononlyblock', 'createaccountblock', 'noautoblockblock', 'emailblock' );
                        foreach( $keys as $key ) {
                                $msg[$key] = wfMsgHtml( $key );
                        }
                        $msg['blocklistline'] = wfMsg( 'blocklistline' );
-                       $msg['contribslink'] = wfMsg( 'contribslink' );
                }
 
                # Prepare links to the blocker's user and talk pages
@@ -283,8 +315,8 @@ class IPUnblockForm {
                if( $block->mAuto ) {
                        $target = $block->getRedactedName(); # Hide the IP addresses of auto-blocks; privacy
                } else {
-                       $target = $sk->makeLinkObj( Title::makeTitle( NS_USER, $block->mAddress ), $block->mAddress );
-                       $target .= ' (' . $sk->makeKnownLinkObj( SpecialPage::getSafeTitleFor( 'Contributions', $block->mAddress ), $msg['contribslink'] ) . ')';
+                       $target = $sk->userLink( $block->mUser, $block->mAddress )
+                               . $sk->userToolLinks( $block->mUser, $block->mAddress, false, Linker::TOOL_LINKS_NOBLOCK );
                }
                
                $formattedTime = $wgLang->timeanddate( $block->mTimestamp, true );
@@ -361,7 +393,7 @@ class IPBlocklistPager extends ReverseChronologicalPager {
                # Usernames and titles are in fact related by a simple substitution of space -> underscore
                # The last few lines of Title::secureAndSplit() tell the story.
                while ( $row = $this->mResult->fetchObject() ) {
-                       $name = str_replace( ' ', '_', $row->user_name );
+                       $name = str_replace( ' ', '_', $row->ipb_by_text );
                        $lb->add( NS_USER, $name );
                        $lb->add( NS_USER_TALK, $name );
                        $name = str_replace( ' ', '_', $row->ipb_address );
@@ -382,10 +414,9 @@ class IPBlocklistPager extends ReverseChronologicalPager {
        function getQueryInfo() {
                $conds = $this->mConds;
                $conds[] = 'ipb_expiry>' . $this->mDb->addQuotes( $this->mDb->timestamp() );
-               $conds[] = 'ipb_by=user_id';
                return array(
-                       'tables' => array( 'ipblocks', 'user' ),
-                       'fields' => $this->mDb->tableName( 'ipblocks' ) . '.*,user_name',
+                       'tables' => 'ipblocks',
+                       'fields' => '*',
                        'conds' => $conds,
                );
        }
@@ -395,4 +426,4 @@ class IPBlocklistPager extends ReverseChronologicalPager {
        }
 }
 
-?>
+