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> </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×tamp=$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 + -
显示快捷键?