Follow-up r81401: fix callback, apparently it was the other way around than I thought.
[lhc/web/wiklou.git] / includes / specials / SpecialUndelete.php
index ba7048b..f582475 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 /**
+ * Implements Special:Undelete
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * with this program; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
  */
 
 /**
  * Used to show archived pages and eventually restore them.
+ *
  * @ingroup SpecialPage
  */
 class PageArchive {
@@ -331,6 +336,9 @@ class PageArchive {
                if( $restoreFiles && $this->title->getNamespace() == NS_FILE ) {
                        $img = wfLocalFile( $this->title );
                        $this->fileStatus = $img->restore( $fileVersions, $unsuppress );
+                       if ( !$this->fileStatus->isOk() ) {
+                               return false;
+                       }
                        $filesRestored = $this->fileStatus->successCount;
                } else {
                        $filesRestored = 0;
@@ -487,7 +495,7 @@ class PageArchive {
                $revision = null;
                $restored = 0;
 
-               while( $row = $ret->fetchObject() ) {
+               foreach ( $ret as $row ) {
                        // Check for key dupes due to shitty archive integrity.
                        if( $row->ar_rev_id ) {
                                $exists = $dbw->selectField( 'revision', '1', array('rev_id' => $row->ar_rev_id), __METHOD__ );
@@ -540,7 +548,8 @@ class PageArchive {
                        }
                } else {
                        // Revision couldn't be created. This is very weird
-                       return self::UNDELETE_UNKNOWNERR;
+                       wfDebug( "Undelete: unknown error...\n" );
+                       return false;
                }
 
                return $restored;
@@ -555,7 +564,7 @@ class PageArchive {
  *
  * @ingroup SpecialPage
  */
-class UndeleteForm extends SpecialPage {
+class SpecialUndelete extends SpecialPage {
        var $mAction, $mTarget, $mTimestamp, $mRestore, $mInvert, $mTargetObj;
        var $mTargetTimestamp, $mAllowed, $mCanView, $mComment, $mToken, $mRequest;
 
@@ -643,6 +652,7 @@ class UndeleteForm extends SpecialPage {
                }
                if ( $this->mTarget !== '' ) {
                        $this->mTargetObj = Title::newFromURL( $this->mTarget );
+                       $wgUser->getSkin()->setRelevantTitle( $this->mTargetObj );
                } else {
                        $this->mTargetObj = null;
                }
@@ -708,7 +718,7 @@ class UndeleteForm extends SpecialPage {
                                'method' => 'get',
                                'action' => $wgScript ) ) .
                        Xml::fieldset( wfMsg( 'undelete-search-box' ) ) .
-                       Xml::hidden( 'title',
+                       Html::hidden( 'title',
                                $this->getTitle()->getPrefixedDbKey() ) .
                        Xml::inputLabel( wfMsg( 'undelete-search-prefix' ),
                                'prefix', 'prefix', 20,
@@ -721,7 +731,7 @@ class UndeleteForm extends SpecialPage {
 
        // Generic list of deleted pages
        private function showList( $result ) {
-               global $wgLang, $wgContLang, $wgUser, $wgOut;
+               global $wgLang, $wgUser, $wgOut;
 
                if( $result->numRows() == 0 ) {
                        $wgOut->addWikiMsg( 'undelete-no-results' );
@@ -733,7 +743,7 @@ class UndeleteForm extends SpecialPage {
                $sk = $wgUser->getSkin();
                $undelete = $this->getTitle();
                $wgOut->addHTML( "<ul>\n" );
-               while( $row = $result->fetchObject() ) {
+               foreach ( $result as $row ) {
                        $title = Title::makeTitleSafe( $row->ar_namespace, $row->ar_title );
                        $link = $sk->linkKnown(
                                $undelete,
@@ -811,28 +821,26 @@ class UndeleteForm extends SpecialPage {
                } else {
                        $openDiv = '<div id="mw-undelete-revision">';
                }
+               $wgOut->addHTML( $openDiv );
 
                // Revision delete links
                $canHide = $wgUser->isAllowed( 'deleterevision' );
-               if( $this->mDiff ) {
-                       $revdlink = ''; // diffs already have revision delete links
-               } else if( $canHide || ($rev->getVisibility() && $wgUser->isAllowed('deletedhistory')) ) {
+               if ( !$this->mDiff && ( $canHide || ( $rev->getVisibility() && $wgUser->isAllowed( 'deletedhistory' ) ) ) ) {
                        if( !$rev->userCan(Revision::DELETED_RESTRICTED ) ) {
-                               $revdlink = $skin->revDeleteLinkDisabled( $canHide ); // revision was hidden from sysops
+                               $wgOut->addHTML( $skin->revDeleteLinkDisabled( $canHide ) ); // revision was hidden from sysops
                        } else {
                                $query = array(
                                        'type'   => 'archive',
                                        'target' => $this->mTargetObj->getPrefixedDBkey(),
                                        'ids'    => $rev->getTimestamp()
                                );
-                               $revdlink = $skin->revDeleteLink( $query,
-                                       $rev->isDeleted( File::DELETED_RESTRICTED ), $canHide );
+                               $wgOut->addHTML( $skin->revDeleteLink( $query,
+                                       $rev->isDeleted( File::DELETED_RESTRICTED ), $canHide ) );
                        }
-               } else {
-                       $revdlink = '';
                }
 
-               $wgOut->addHTML( $openDiv . $revdlink . wfMsgWikiHtml( 'undelete-revision', $link, $time, $user, $d, $t ) . '</div>' );
+               $wgOut->addWikiMsgArray( 'undelete-revision', array( $link, $time, $user, $d, $t ), array( 'replaceafter' ) );
+               $wgOut->addHTML( '</div>' );
                wfRunHooks( 'UndeleteShowRevision', array( $this->mTargetObj, $rev ) );
 
                if( $this->mPreview ) {
@@ -1015,7 +1023,7 @@ class UndeleteForm extends SpecialPage {
        }
 
        private function showHistory( ) {
-               global $wgLang, $wgUser, $wgOut;
+               global $wgUser, $wgOut;
 
                $sk = $wgUser->getSkin();
                if( $this->mAllowed ) {
@@ -1053,7 +1061,7 @@ class UndeleteForm extends SpecialPage {
                # Batch existence check on user and talk pages
                if( $haveRevisions ) {
                        $batch = new LinkBatch();
-                       while( $row = $revisions->fetchObject() ) {
+                       foreach ( $revisions as $row ) {
                                $batch->addObj( Title::makeTitleSafe( NS_USER, $row->ar_user_text ) );
                                $batch->addObj( Title::makeTitleSafe( NS_USER_TALK, $row->ar_user_text ) );
                        }
@@ -1062,7 +1070,7 @@ class UndeleteForm extends SpecialPage {
                }
                if( $haveFiles ) {
                        $batch = new LinkBatch();
-                       while( $row = $files->fetchObject() ) {
+                       foreach ( $files as $row ) {
                                $batch->addObj( Title::makeTitleSafe( NS_USER, $row->fa_user_text ) );
                                $batch->addObj( Title::makeTitleSafe( NS_USER_TALK, $row->fa_user_text ) );
                        }
@@ -1106,7 +1114,7 @@ class UndeleteForm extends SpecialPage {
                                Xml::openElement( 'table', array( 'id' => 'mw-undelete-table' ) ) .
                                        "<tr>
                                                <td colspan='2' class='mw-undelete-extrahelp'>" .
-                                                       wfMsgWikiHtml( 'undeleteextrahelp' ) .
+                                                       wfMsgExt( 'undeleteextrahelp', 'parse' ) .
                                                "</td>
                                        </tr>
                                        <tr>
@@ -1137,11 +1145,10 @@ class UndeleteForm extends SpecialPage {
                if( $haveRevisions ) {
                        # The page's stored (deleted) history:
                        $wgOut->addHTML("<ul>");
-                       $target = urlencode( $this->mTarget );
                        $remaining = $revisions->numRows();
                        $earliestLiveTime = $this->mTargetObj->getEarliestRevTime();
 
-                       while( $row = $revisions->fetchObject() ) {
+                       foreach ( $revisions as $row ) {
                                $remaining--;
                                $wgOut->addHTML( $this->formatRevisionRow( $row, $earliestLiveTime, $remaining, $sk ) );
                        }
@@ -1154,7 +1161,7 @@ class UndeleteForm extends SpecialPage {
                if( $haveFiles ) {
                        $wgOut->addHTML( Xml::element( 'h2', null, wfMsg( 'filehist' ) ) . "\n" );
                        $wgOut->addHTML( "<ul>" );
-                       while( $row = $files->fetchObject() ) {
+                       foreach ( $files as $row ) {
                                $wgOut->addHTML( $this->formatFileRow( $row, $sk ) );
                        }
                        $files->free();
@@ -1163,8 +1170,8 @@ class UndeleteForm extends SpecialPage {
 
                if ( $this->mAllowed ) {
                        # Slip in the hidden controls here
-                       $misc  = Xml::hidden( 'target', $this->mTarget );
-                       $misc .= Xml::hidden( 'wpEditToken', $wgUser->editToken() );
+                       $misc  = Html::hidden( 'target', $this->mTarget );
+                       $misc .= Html::hidden( 'wpEditToken', $wgUser->editToken() );
                        $misc .= Xml::closeElement( 'form' );
                        $wgOut->addHTML( $misc );
                }
@@ -1257,7 +1264,6 @@ class UndeleteForm extends SpecialPage {
                if( $this->mAllowed && $row->fa_storage_key ) {
                        $checkBox = Xml::check( "fileid" . $row->fa_id );
                        $key = urlencode( $row->fa_storage_key );
-                       $target = urlencode( $this->mTarget );
                        $pageLink = $this->getFileLink( $file, $this->getTitle(), $ts, $key, $sk );
                } else {
                        $checkBox = '';
@@ -1402,10 +1408,10 @@ class UndeleteForm extends SpecialPage {
 
                                $skin = $wgUser->getSkin();
                                $link = $skin->linkKnown( $this->mTargetObj );
-                               $wgOut->addHTML( wfMsgWikiHtml( 'undeletedpage', $link ) );
+                               $wgOut->addWikiMsgArray( 'undeletedpage', array( $link ), array( 'replaceafter' ) );
                        } else {
                                $wgOut->showFatalError( wfMsg( "cannotundelete" ) );
-                               $wgOut->addHTML( '<p>' . wfMsgHtml( "undeleterevdel" ) . '</p>' );
+                               $wgOut->addWikiMsg( 'undeleterevdel' );
                        }
 
                        // Show file deletion warnings and errors