specialundelete.php

来自「php 开发的内容管理系统」· PHP 代码 · 共 738 行 · 第 1/2 页

PHP
738
字号
			if( $newid ) {				Article::onArticleCreate( $this->title );			} else {				Article::onArticleEdit( $this->title );			}		} else {			# Something went terribly wrong!		}		# Now that it's safely stored, take it out of the archive		$dbw->delete( 'archive',			/* WHERE */ array(				'ar_namespace' => $this->title->getNamespace(),				'ar_title' => $this->title->getDBkey(),				$oldones ),			$fname );		return $restored;	}}/** * * @package MediaWiki * @subpackage SpecialPage */class UndeleteForm {	var $mAction, $mTarget, $mTimestamp, $mRestore, $mTargetObj;	var $mTargetTimestamp, $mAllowed, $mComment;	function UndeleteForm( &$request, $par = "" ) {		global $wgUser;		$this->mAction = $request->getText( 'action' );		$this->mTarget = $request->getText( 'target' );		$this->mTimestamp = $request->getText( 'timestamp' );		$this->mFile = $request->getVal( 'file' );				$posted = $request->wasPosted() &&			$wgUser->matchEditToken( $request->getVal( 'wpEditToken' ) );		$this->mRestore = $request->getCheck( 'restore' ) && $posted;		$this->mPreview = $request->getCheck( 'preview' ) && $posted;		$this->mComment = $request->getText( 'wpComment' );				if( $par != "" ) {			$this->mTarget = $par;		}		if ( $wgUser->isAllowed( 'delete' ) && !$wgUser->isBlocked() ) {			$this->mAllowed = true;		} else {			$this->mAllowed = false;			$this->mTimestamp = '';			$this->mRestore = false;		}		if ( $this->mTarget !== "" ) {			$this->mTargetObj = Title::newFromURL( $this->mTarget );		} else {			$this->mTargetObj = NULL;		}		if( $this->mRestore ) {			$timestamps = array();			$this->mFileVersions = array();			foreach( $_REQUEST as $key => $val ) {				if( preg_match( '/^ts(\d{14})$/', $key, $matches ) ) {					array_push( $timestamps, $matches[1] );				}								if( preg_match( '/^fileid(\d+)$/', $key, $matches ) ) {					$this->mFileVersions[] = intval( $matches[1] );				}			}			rsort( $timestamps );			$this->mTargetTimestamp = $timestamps;		}	}	function execute() {		if( is_null( $this->mTargetObj ) ) {			return $this->showList();		}		if( $this->mTimestamp !== '' ) {			return $this->showRevision( $this->mTimestamp );		}		if( $this->mFile !== null ) {			return $this->showFile( $this->mFile );		}		if( $this->mRestore && $this->mAction == "submit" ) {			return $this->undelete();		}		return $this->showHistory();	}	/* private */ function showList() {		global $wgLang, $wgContLang, $wgUser, $wgOut;		$fname = "UndeleteForm::showList";		# List undeletable articles		$result = PageArchive::listAllPages();		if ( $this->mAllowed ) {			$wgOut->setPagetitle( wfMsg( "undeletepage" ) );		} else {			$wgOut->setPagetitle( wfMsg( "viewdeletedpage" ) );		}		$wgOut->addWikiText( wfMsg( "undeletepagetext" ) );		$sk = $wgUser->getSkin();		$undelete =& Title::makeTitle( NS_SPECIAL, 'Undelete' );		$wgOut->addHTML( "<ul>\n" );		while( $row = $result->fetchObject() ) {			$n = ($row->ar_namespace ?				($wgContLang->getNsText( $row->ar_namespace ) . ":") : "").				$row->ar_title;			$link = $sk->makeKnownLinkObj( $undelete,				htmlspecialchars( $n ), "target=" . urlencode( $n ) );			$revisions = htmlspecialchars( wfMsg( "undeleterevisions",				$wgLang->formatNum( $row->count ) ) );			$wgOut->addHTML( "<li>$link ($revisions)</li>\n" );		}		$result->free();		$wgOut->addHTML( "</ul>\n" );		return true;	}	/* private */ function showRevision( $timestamp ) {		global $wgLang, $wgUser, $wgOut;		$fname = "UndeleteForm::showRevision";		if(!preg_match("/[0-9]{14}/",$timestamp)) return 0;		$archive =& new PageArchive( $this->mTargetObj );		$text = $archive->getRevisionText( $timestamp );		$wgOut->setPagetitle( wfMsg( "undeletepage" ) );		$wgOut->addWikiText( "(" . wfMsg( "undeleterevision",			$wgLang->date( $timestamp ) ) . ")\n" );				if( $this->mPreview ) {			$wgOut->addHtml( "<hr />\n" );			$wgOut->addWikiText( $text );		}				$self = Title::makeTitle( NS_SPECIAL, "Undelete" );				$wgOut->addHtml(			wfElement( 'textarea', array(					'readonly' => true,					'cols' => intval( $wgUser->getOption( 'cols' ) ),					'rows' => intval( $wgUser->getOption( 'rows' ) ) ),				$text . "\n" ) .			wfOpenElement( 'div' ) .			wfOpenElement( 'form', array(				'method' => 'post',				'action' => $self->getLocalURL( "action=submit" ) ) ) .			wfElement( 'input', array(				'type' => 'hidden',				'name' => 'target',				'value' => $this->mTargetObj->getPrefixedDbKey() ) ) .			wfElement( 'input', array(				'type' => 'hidden',				'name' => 'timestamp',				'value' => $timestamp ) ) .			wfElement( 'input', array(				'type' => 'hidden',				'name' => 'wpEditToken',				'value' => $wgUser->editToken() ) ) .			wfElement( 'input', array(				'type' => 'hidden',				'name' => 'preview',				'value' => '1' ) ) .			wfElement( 'input', array(				'type' => 'submit',				'value' => wfMsg( 'showpreview' ) ) ) .			wfCloseElement( 'form' ) .			wfCloseElement( 'div' ) );	}		/**	 * Show a deleted file version requested by the visitor.	 */	function showFile( $key ) {		global $wgOut;		$wgOut->disable();				$store = FileStore::get( 'deleted' );		$store->stream( $key );	}	/* private */ function showHistory() {		global $wgLang, $wgUser, $wgOut;		$sk = $wgUser->getSkin();		if ( $this->mAllowed ) {			$wgOut->setPagetitle( wfMsg( "undeletepage" ) );		} else {			$wgOut->setPagetitle( wfMsg( 'viewdeletedpage' ) );		}		$archive = new PageArchive( $this->mTargetObj );		$text = $archive->getLastRevisionText();		/*		if( is_null( $text ) ) {			$wgOut->addWikiText( wfMsg( "nohistory" ) );			return;		}		*/		if ( $this->mAllowed ) {			$wgOut->addWikiText( wfMsg( "undeletehistory" ) );		} else {			$wgOut->addWikiText( wfMsg( "undeletehistorynoadmin" ) );		}		# List all stored revisions		$revisions = $archive->listRevisions();		$files = $archive->listFiles();				$haveRevisions = $revisions && $revisions->numRows() > 0;		$haveFiles = $files && $files->numRows() > 0;				# Batch existence check on user and talk pages		if( $haveRevisions ) {			$batch = new LinkBatch();			while( $row = $revisions->fetchObject() ) {				$batch->addObj( Title::makeTitleSafe( NS_USER, $row->ar_user_text ) );				$batch->addObj( Title::makeTitleSafe( NS_USER_TALK, $row->ar_user_text ) );			}			$batch->execute();			$revisions->seek( 0 );		}		if( $haveFiles ) {			$batch = new LinkBatch();			while( $row = $files->fetchObject() ) {				$batch->addObj( Title::makeTitleSafe( NS_USER, $row->fa_user_text ) );				$batch->addObj( Title::makeTitleSafe( NS_USER_TALK, $row->fa_user_text ) );			}			$batch->execute();			$files->seek( 0 );		}		if ( $this->mAllowed ) {			$titleObj = Title::makeTitle( NS_SPECIAL, "Undelete" );			$action = $titleObj->getLocalURL( "action=submit" );			# Start the form here			$top = wfOpenElement( 'form', array( 'method' => 'post', 'action' => $action, 'id' => 'undelete' ) );			$wgOut->addHtml( $top );		}		# Show relevant lines from the deletion log:		$wgOut->addHTML( "<h2>" . htmlspecialchars( LogPage::logName( 'delete' ) ) . "</h2>\n" );		require_once( 'SpecialLog.php' );		$logViewer =& new LogViewer(			new LogReader(				new FauxRequest(					array( 'page' => $this->mTargetObj->getPrefixedText(),						   'type' => 'delete' ) ) ) );		$logViewer->showList( $wgOut );				if( $this->mAllowed && ( $haveRevisions || $haveFiles ) ) {			# Format the user-visible controls (comment field, submission button)			# in a nice little table			$table = '<fieldset><table><tr>';			$table .= '<td colspan="2">' . wfMsgWikiHtml( 'undeleteextrahelp' ) . '</td></tr><tr>';			$table .= '<td align="right"><strong>' . wfMsgHtml( 'undeletecomment' ) . '</strong></td>';			$table .= '<td>' . wfInput( 'wpComment', 50, $this->mComment ) . '</td>';			$table .= '</tr><tr><td>&nbsp;</td><td>';			$table .= wfSubmitButton( wfMsg( 'undeletebtn' ), array( 'name' => 'restore' ) );			$table .= wfElement( 'input', array( 'type' => 'reset', 'value' => wfMsg( 'undeletereset' ) ) );			$table .= '</td></tr></table></fieldset>';			$wgOut->addHtml( $table );		}			$wgOut->addHTML( "<h2>" . htmlspecialchars( wfMsg( "history" ) ) . "</h2>\n" );				if( $haveRevisions ) {			# The page's stored (deleted) history:			$wgOut->addHTML("<ul>");			$target = urlencode( $this->mTarget );			while( $row = $revisions->fetchObject() ) {				$ts = wfTimestamp( TS_MW, $row->ar_timestamp );				if ( $this->mAllowed ) {					$checkBox = wfCheck( "ts$ts" );					$pageLink = $sk->makeKnownLinkObj( $titleObj,						$wgLang->timeanddate( $ts, true ),						"target=$target&timestamp=$ts" );				} else {					$checkBox = '';					$pageLink = $wgLang->timeanddate( $ts, true );				}				$userLink = $sk->userLink( $row->ar_user, $row->ar_user_text ) . $sk->userToolLinks( $row->ar_user, $row->ar_user_text );				$comment = $sk->commentBlock( $row->ar_comment );				$wgOut->addHTML( "<li>$checkBox $pageLink . . $userLink $comment</li>\n" );				}			$revisions->free();			$wgOut->addHTML("</ul>");		} else {			$wgOut->addWikiText( wfMsg( "nohistory" ) );		}				if( $haveFiles ) {			$wgOut->addHtml( "<h2>" . wfMsgHtml( 'imghistory' ) . "</h2>\n" );			$wgOut->addHtml( "<ul>" );			while( $row = $files->fetchObject() ) {				$ts = wfTimestamp( TS_MW, $row->fa_timestamp );				if ( $this->mAllowed && $row->fa_storage_key ) {					$checkBox = wfCheck( "fileid" . $row->fa_id );					$key = urlencode( $row->fa_storage_key );					$target = urlencode( $this->mTarget );					$pageLink = $sk->makeKnownLinkObj( $titleObj,						$wgLang->timeanddate( $ts, true ),						"target=$target&file=$key" );				} else {					$checkBox = '';					$pageLink = $wgLang->timeanddate( $ts, true );				} 				$userLink = $sk->userLink( $row->fa_user, $row->fa_user_text ) . $sk->userToolLinks( $row->fa_user, $row->fa_user_text );				$data =					wfMsgHtml( 'widthheight',						$wgLang->formatNum( $row->fa_width ),						$wgLang->formatNum( $row->fa_height ) ) .					' (' .					wfMsgHtml( 'nbytes', $wgLang->formatNum( $row->fa_size ) ) .					')';				$comment = $sk->commentBlock( $row->fa_description );				$wgOut->addHTML( "<li>$checkBox $pageLink . . $userLink $data $comment</li>\n" );			}			$files->free();			$wgOut->addHTML( "</ul>" );		}				if ( $this->mAllowed ) {			# Slip in the hidden controls here			$misc  = wfHidden( 'target', $this->mTarget );			$misc .= wfHidden( 'wpEditToken', $wgUser->editToken() );			$wgOut->addHtml( $misc . '</form>' );		}		return true;	}	function undelete() {		global $wgOut, $wgUser;		if( !is_null( $this->mTargetObj ) ) {			$archive = new PageArchive( $this->mTargetObj );			$ok = true;						$ok = $archive->undelete(				$this->mTargetTimestamp,				$this->mComment,				$this->mFileVersions );						if( $ok ) {				$skin =& $wgUser->getSkin();				$link = $skin->makeKnownLinkObj( $this->mTargetObj );				$wgOut->addHtml( wfMsgWikiHtml( 'undeletedpage', $link ) );				return true;			}		}		$wgOut->showFatalError( wfMsg( "cannotundelete" ) );		return false;	}}?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?