* @subpackage SpecialPage
*/
class PageArchive {
- var $title;
+ protected $title;
- function PageArchive( &$title ) {
+ function __construct( $title ) {
if( is_null( $title ) ) {
throw new MWException( 'Archiver() given a null title.');
}
- $this->title =& $title;
+ $this->title = $title;
}
/**
* List all deleted pages recorded in the archive table. Returns result
* wrapper with (ar_namespace, ar_title, count) fields, ordered by page
- * namespace/title. Can be called staticaly.
+ * namespace/title.
*
* @return ResultWrapper
*/
- /* static */ function listAllPages() {
- $dbr =& wfGetDB( DB_SLAVE );
- $archive = $dbr->tableName( 'archive' );
-
- $sql = "SELECT ar_namespace,ar_title, COUNT(*) AS count FROM $archive " .
- "GROUP BY ar_namespace,ar_title ORDER BY ar_namespace,ar_title";
-
- return $dbr->resultObject( $dbr->query( $sql, 'PageArchive::listAllPages' ) );
+ public static function listAllPages() {
+ $dbr = wfGetDB( DB_SLAVE );
+ return self::listPages( $dbr, '' );
+ }
+
+ /**
+ * List deleted pages recorded in the archive table matching the
+ * given title prefix.
+ * Returns result wrapper with (ar_namespace, ar_title, count) fields.
+ *
+ * @return ResultWrapper
+ */
+ public static function listPagesByPrefix( $prefix ) {
+ $dbr = wfGetDB( DB_SLAVE );
+
+ $title = Title::newFromText( $prefix );
+ if( $title ) {
+ $ns = $title->getNamespace();
+ $encPrefix = $dbr->escapeLike( $title->getDbKey() );
+ } else {
+ // Prolly won't work too good
+ // @todo handle bare namespace names cleanly?
+ $ns = 0;
+ $encPrefix = $dbr->escapeLike( $prefix );
+ }
+ $conds = array(
+ 'ar_namespace' => $ns,
+ "ar_title LIKE '$encPrefix%'",
+ );
+ return self::listPages( $dbr, $conds );
}
+ protected static function listPages( $dbr, $condition ) {
+ return $dbr->resultObject(
+ $dbr->select(
+ array( 'archive' ),
+ array(
+ 'ar_namespace',
+ 'ar_title',
+ 'COUNT(*) AS count',
+ ),
+ $condition,
+ __METHOD__,
+ array(
+ 'GROUP BY' => 'ar_namespace,ar_title',
+ 'ORDER BY' => 'ar_namespace,ar_title',
+ 'LIMIT' => 100,
+ )
+ )
+ );
+ }
+
/**
* List the revisions of the given page. Returns result wrapper with
* (ar_minor_edit, ar_timestamp, ar_user, ar_user_text, ar_comment) fields.
* @return ResultWrapper
*/
function listRevisions() {
- $dbr =& wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_SLAVE );
$res = $dbr->select( 'archive',
array( 'ar_minor_edit', 'ar_timestamp', 'ar_user', 'ar_user_text', 'ar_comment' ),
array( 'ar_namespace' => $this->title->getNamespace(),
*/
function listFiles() {
if( $this->title->getNamespace() == NS_IMAGE ) {
- $dbr =& wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_SLAVE );
$res = $dbr->select( 'filearchive',
array(
'fa_id',
* @return Revision
*/
function getRevision( $timestamp ) {
- $dbr =& wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_SLAVE );
$row = $dbr->selectRow( 'archive',
array(
'ar_rev_id',
return Revision::getRevisionText( $row, "ar_" );
} else {
// New-style: keyed to the text storage backend.
- $dbr =& wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_SLAVE );
$text = $dbr->selectRow( 'text',
array( 'old_text', 'old_flags' ),
array( 'old_id' => $row->ar_text_id ),
* @return string
*/
function getLastRevisionText() {
- $dbr =& wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_SLAVE );
$row = $dbr->selectRow( 'archive',
array( 'ar_text', 'ar_flags', 'ar_text_id' ),
array( 'ar_namespace' => $this->title->getNamespace(),
* @return bool
*/
function isDeleted() {
- $dbr =& wfGetDB( DB_SLAVE );
+ $dbr = wfGetDB( DB_SLAVE );
$n = $dbr->selectField( 'archive', 'COUNT(ar_title)',
array( 'ar_namespace' => $this->title->getNamespace(),
'ar_title' => $this->title->getDBkey() ) );
$restoreAll = empty( $timestamps );
- $dbw =& wfGetDB( DB_MASTER );
+ $dbw = wfGetDB( DB_MASTER );
$page = $dbw->tableName( 'archive' );
# Does this page already exist? We'll have to update it...
var $mAction, $mTarget, $mTimestamp, $mRestore, $mTargetObj;
var $mTargetTimestamp, $mAllowed, $mComment;
- function UndeleteForm( &$request, $par = "" ) {
+ function UndeleteForm( $request, $par = "" ) {
global $wgUser;
$this->mAction = $request->getVal( 'action' );
$this->mTarget = $request->getVal( 'target' );
+ $this->mSearchPrefix = $request->getText( 'prefix' );
$time = $request->getVal( 'timestamp' );
$this->mTimestamp = $time ? wfTimestamp( TS_MW, $time ) : '';
$this->mFile = $request->getVal( 'file' );
}
function execute() {
-
+ global $wgOut;
+ if ( $this->mAllowed ) {
+ $wgOut->setPagetitle( wfMsg( "undeletepage" ) );
+ } else {
+ $wgOut->setPagetitle( wfMsg( "viewdeletedpage" ) );
+ }
+
if( is_null( $this->mTargetObj ) ) {
- return $this->showList();
+ $this->showSearchForm();
+
+ # List undeletable articles
+ if( $this->mSearchPrefix ) {
+ $result = PageArchive::listPagesByPrefix(
+ $this->mSearchPrefix );
+ $this->showList( $result );
+ }
+ return;
}
if( $this->mTimestamp !== '' ) {
return $this->showRevision( $this->mTimestamp );
return $this->showHistory();
}
- /* private */ function showList() {
- global $wgLang, $wgContLang, $wgUser, $wgOut;
-
- # List undeletable articles
- $result = PageArchive::listAllPages();
+ function showSearchForm() {
+ global $wgOut, $wgScript;
+ $wgOut->addWikiText( wfMsg( 'undelete-header' ) );
+
+ $wgOut->addHtml(
+ Xml::openElement( 'form', array(
+ 'method' => 'get',
+ 'action' => $wgScript ) ) .
+ '<fieldset>' .
+ Xml::element( 'legend', array(),
+ wfMsg( 'undelete-search-box' ) ) .
+ Xml::hidden( 'title',
+ SpecialPage::getTitleFor( 'Undelete' )->getPrefixedDbKey() ) .
+ Xml::inputLabel( wfMsg( 'undelete-search-prefix' ),
+ 'prefix', 'prefix', 20,
+ $this->mSearchPrefix ) .
+ Xml::submitButton( wfMsg( 'undelete-search-submit' ) ) .
+ '</fieldset>' .
+ '</form>' );
+ }
- if ( $this->mAllowed ) {
- $wgOut->setPagetitle( wfMsg( "undeletepage" ) );
- } else {
- $wgOut->setPagetitle( wfMsg( "viewdeletedpage" ) );
+ /* private */ function showList( $result ) {
+ global $wgLang, $wgContLang, $wgUser, $wgOut;
+
+ if( $result->numRows() == 0 ) {
+ $wgOut->addWikiText( wfMsg( 'undelete-no-results' ) );
+ return;
}
+
$wgOut->addWikiText( wfMsg( "undeletepagetext" ) );
$sk = $wgUser->getSkin();
while( $row = $result->fetchObject() ) {
$title = Title::makeTitleSafe( $row->ar_namespace, $row->ar_title );
$link = $sk->makeKnownLinkObj( $undelete, htmlspecialchars( $title->getPrefixedText() ), 'target=' . $title->getPrefixedUrl() );
- $revs = wfMsgHtml( 'undeleterevisions', $wgLang->formatNum( $row->count ) );
+ #$revs = wfMsgHtml( 'undeleterevisions', $wgLang->formatNum( $row->count ) );
+ $revs = wfMsgExt( 'undeleterevisions',
+ array( 'parseinline' ),
+ $wgLang->formatNum( $row->count ) );
$wgOut->addHtml( "<li>{$link} ({$revs})</li>\n" );
}
$result->free();
$this->mFileVersions );
if( $ok ) {
- $skin =& $wgUser->getSkin();
+ $skin = $wgUser->getSkin();
$link = $skin->makeKnownLinkObj( $this->mTargetObj );
$wgOut->addHtml( wfMsgWikiHtml( 'undeletedpage', $link ) );
return true;