$title = Title::newFromText( $prefix );
if( $title ) {
$ns = $title->getNamespace();
- $encPrefix = $dbr->escapeLike( $title->getDbKey() );
+ $encPrefix = $dbr->escapeLike( $title->getDBkey() );
} else {
// Prolly won't work too good
// @todo handle bare namespace names cleanly?
'fa_user',
'fa_user_text',
'fa_timestamp' ),
- array( 'fa_name' => $this->title->getDbKey() ),
+ array( 'fa_name' => $this->title->getDBkey() ),
__METHOD__,
array( 'ORDER BY' => 'fa_timestamp DESC' ) );
$ret = $dbr->resultObject( $res );
'ar_text_id',
'ar_len' ),
array( 'ar_namespace' => $this->title->getNamespace(),
- 'ar_title' => $this->title->getDbkey(),
+ 'ar_title' => $this->title->getDBkey(),
'ar_timestamp' => $dbr->timestamp( $timestamp ) ),
__METHOD__ );
if( $row ) {
$row = $dbr->selectRow( 'archive',
'ar_timestamp',
array( 'ar_namespace' => $this->title->getNamespace(),
- 'ar_title' => $this->title->getDbkey(),
+ 'ar_title' => $this->title->getDBkey(),
'ar_timestamp < ' .
$dbr->addQuotes( $dbr->timestamp( $timestamp ) ) ),
__METHOD__,
array( 'rev_id', 'rev_timestamp' ),
array(
'page_namespace' => $this->title->getNamespace(),
- 'page_title' => $this->title->getDbkey(),
+ 'page_title' => $this->title->getDBkey(),
'page_id = rev_page',
'rev_timestamp < ' .
$dbr->addQuotes( $dbr->timestamp( $timestamp ) ) ),
* @param string $comment
* @param array $fileVersions
*
- * @return true on success.
+ * @return array(number of file revisions restored, number of image revisions restored, log message)
+ * on success, false on failure
*/
function undelete( $timestamps, $comment = '', $fileVersions = array() ) {
// If both the set of text revisions and file revisions are empty,
if( $restoreText ) {
$textRestored = $this->undeleteRevisions( $timestamps );
+ if($textRestored === false) // It must be one of UNDELETE_*
+ return false;
} else {
$textRestored = 0;
}
$log = new LogPage( 'delete' );
if( $textRestored && $filesRestored ) {
- $reason = wfMsgForContent( 'undeletedrevisions-files',
+ $reason = wfMsgExt( 'undeletedrevisions-files', array( 'content', 'parsemag' ),
$wgContLang->formatNum( $textRestored ),
$wgContLang->formatNum( $filesRestored ) );
} elseif( $textRestored ) {
- $reason = wfMsgForContent( 'undeletedrevisions',
+ $reason = wfMsgExt( 'undeletedrevisions', array( 'content', 'parsemag' ),
$wgContLang->formatNum( $textRestored ) );
} elseif( $filesRestored ) {
- $reason = wfMsgForContent( 'undeletedfiles',
+ $reason = wfMsgExt( 'undeletedfiles', array( 'content', 'parsemag' ),
$wgContLang->formatNum( $filesRestored ) );
} else {
wfDebug( "Undelete: nothing undeleted...\n" );
$reason .= ": {$comment}";
$log->addEntry( 'restore', $this->title, $reason );
- if ( $this->fileStatus && !$this->fileStatus->ok ) {
- return false;
- } else {
- return true;
- }
+ return array($textRestored, $filesRestored, $reason);
}
/**
* @param string $comment
* @param array $fileVersions
*
- * @return int number of revisions restored
+ * @return mixed number of revisions restored or false on failure
*/
private function undeleteRevisions( $timestamps ) {
+ if ( wfReadOnly() )
+ return false;
+
$restoreAll = empty( $timestamps );
$dbw = wfGetDB( DB_MASTER );
'ar_minor_edit',
'ar_flags',
'ar_text_id',
+ 'ar_page_id',
'ar_len' ),
/* WHERE */ array(
'ar_namespace' => $this->title->getNamespace(),
) );
$revision->insertOn( $dbw );
$restored++;
+
+ wfRunHooks( 'ArticleRevisionUndeleted', array( &$this->title, $revision, $row->ar_page_id ) );
}
+ // Was anything restored at all?
+ if($restored == 0)
+ return 0;
if( $revision ) {
// Attach the latest revision to the page...
wfRunHooks( 'ArticleUndelete', array( &$this->title, false ) );
Article::onArticleEdit( $this->title );
}
+
+ if( $this->title->getNamespace() == NS_IMAGE ) {
+ $update = new HTMLCacheUpdate( $this->title, 'imagelinks' );
+ $update->doUpdate();
+ }
} else {
- # Something went terribly wrong!
+ // Revision couldn't be created. This is very weird
+ return self::UNDELETE_UNKNOWNERR;
}
# Now that it's safely stored, take it out of the archive
if( $par != "" ) {
$this->mTarget = $par;
}
- if ( $wgUser->isAllowed( 'delete' ) && !$wgUser->isBlocked() ) {
+ if ( $wgUser->isAllowed( 'undelete' ) && !$wgUser->isBlocked() ) {
$this->mAllowed = true;
} else {
$this->mAllowed = false;
function showSearchForm() {
global $wgOut, $wgScript;
- $wgOut->addWikiText( wfMsg( 'undelete-header' ) );
+ $wgOut->addWikiMsg( 'undelete-header' );
$wgOut->addHtml(
Xml::openElement( 'form', array(
global $wgLang, $wgContLang, $wgUser, $wgOut;
if( $result->numRows() == 0 ) {
- $wgOut->addWikiText( wfMsg( 'undelete-no-results' ) );
+ $wgOut->addWikiMsg( 'undelete-no-results' );
return;
}
- $wgOut->addWikiText( wfMsg( "undeletepagetext" ) );
+ $wgOut->addWikiMsg( "undeletepagetext" );
$sk = $wgUser->getSkin();
$undelete = SpecialPage::getTitleFor( 'Undelete' );
$rev = $archive->getRevision( $timestamp );
if( !$rev ) {
- $wgOut->addWikiTexT( wfMsg( 'undeleterevision-missing' ) );
+ $wgOut->addWikiMsg( 'undeleterevision-missing' );
return;
}
$wgOut->setPageTitle( wfMsg( 'undeletepage' ) );
$link = $skin->makeKnownLinkObj(
- $self,
- htmlspecialchars( $this->mTargetObj->getPrefixedText() ),
- 'target=' . $this->mTargetObj->getPrefixedUrl()
+ SpecialPage::getTitleFor( 'Undelete', $this->mTargetObj->getPrefixedDBkey() ),
+ htmlspecialchars( $this->mTargetObj->getPrefixedText() )
);
- $time = htmlspecialchars( $wgLang->timeAndDate( $timestamp ) );
+ $time = htmlspecialchars( $wgLang->timeAndDate( $timestamp, true ) );
$user = $skin->userLink( $rev->getUser(), $rev->getUserText() )
. $skin->userToolLinks( $rev->getUser(), $rev->getUserText() );
-
-
+
if( $this->mDiff ) {
$previousRev = $archive->getPreviousRevision( $timestamp );
if( $previousRev ) {
$wgOut->addHtml( '<hr />' );
}
} else {
- $wgOut->addHtml( 'No previous revision found.' );
+ $wgOut->addHtml( wfMsgHtml( 'undelete-nodiff' ) );
}
}
'<div id="mw-diff-otitle1"><strong>' .
$sk->makeLinkObj( $targetPage,
wfMsgHtml( 'revisionasof',
- $wgLang->timeanddate( $rev->getTimestamp() ) ),
+ $wgLang->timeanddate( $rev->getTimestamp(), true ) ),
$targetQuery ) .
( $isDeleted ? ' ' . wfMsgHtml( 'deletedrev' ) : '' ) .
'</strong></div>' .
/*
$text = $archive->getLastRevisionText();
if( is_null( $text ) ) {
- $wgOut->addWikiText( wfMsg( "nohistory" ) );
+ $wgOut->addWikiMsg( "nohistory" );
return;
}
*/
if ( $this->mAllowed ) {
- $wgOut->addWikiText( wfMsg( "undeletehistory" ) );
+ $wgOut->addWikiMsg( "undeletehistory" );
} else {
- $wgOut->addWikiText( wfMsg( "undeletehistorynoadmin" ) );
+ $wgOut->addWikiMsg( "undeletehistorynoadmin" );
}
# List all stored revisions
$revisions->free();
$wgOut->addHTML("</ul>");
} else {
- $wgOut->addWikiText( wfMsg( "nohistory" ) );
+ $wgOut->addWikiMsg( "nohistory" );
}
if( $haveFiles ) {
function undelete() {
global $wgOut, $wgUser;
+ if ( wfReadOnly() ) {
+ $wgOut->readOnlyPage();
+ return;
+ }
if( !is_null( $this->mTargetObj ) ) {
$archive = new PageArchive( $this->mTargetObj );
$this->mComment,
$this->mFileVersions );
- if( $ok ) {
+ if( is_array($ok) ) {
+ if ( $ok[1] ) // Undeleted file count
+ wfRunHooks( 'FileUndeleteComplete', array(
+ $this->mTargetObj, $this->mFileVersions,
+ $wgUser, $this->mComment) );
+
$skin = $wgUser->getSkin();
$link = $skin->makeKnownLinkObj( $this->mTargetObj );
$wgOut->addHtml( wfMsgWikiHtml( 'undeletedpage', $link ) );
return false;
}
}
-
-