var $formtype;
var $firsttime;
var $lastDelete;
+ var $mTokenOk = true;
# Form values
var $save = false, $preview = false, $diff = false;
*/
function edit() {
global $wgOut, $wgUser, $wgRequest, $wgTitle;
-
+
+ if ( ! wfRunHooks( 'AlternateEdit', array( &$this ) ) )
+ return;
+
$fname = 'EditPage::edit';
wfProfileIn( $fname );
wfDebug( "$fname: enter\n" );
wfDebug( "POST DATA: " . var_export( $_POST, true ) . "\n" );
$this->preview = true;
} else {
- if( $this->tokenOk( $request ) ) {
- # Some browsers will not report any submit button
- # if the user hits enter in the comment box.
- # The unmarked state will be assumed to be a save,
- # if the form seems otherwise complete.
- wfDebug( "$fname: Passed token check.\n" );
- $this->preview = $request->getCheck( 'wpPreview' );
- $this->diff = $request->getCheck( 'wpDiff' );
- } else {
- # Page might be a hack attempt posted from
- # an external site. Preview instead of saving.
- wfDebug( "$fname: Failed token check; forcing preview\n" );
- $this->preview = true;
+ $this->preview = $request->getCheck( 'wpPreview' );
+ $this->diff = $request->getCheck( 'wpDiff' );
+
+ if( !$this->preview ) {
+ if ( $this->tokenOk( $request ) ) {
+ # Some browsers will not report any submit button
+ # if the user hits enter in the comment box.
+ # The unmarked state will be assumed to be a save,
+ # if the form seems otherwise complete.
+ wfDebug( "$fname: Passed token check.\n" );
+ } else {
+ # Page might be a hack attempt posted from
+ # an external site. Preview instead of saving.
+ wfDebug( "$fname: Failed token check; forcing preview\n" );
+ $this->preview = true;
+ }
}
}
$this->save = ! ( $this->preview OR $this->diff );
if( $wgUser->isAnon() ) {
# Anonymous users may not have a session
# open. Don't tokenize.
- return true;
+ $this->mTokenOk = true;
} else {
- return $wgUser->matchEditToken( $request->getVal( 'wpEditToken' ) );
+ $this->mTokenOk = $wgUser->matchEditToken( $request->getVal( 'wpEditToken' ) );
}
+ return $this->mTokenOk;
}
function showIntro() {
}
$wgOut->setPageTitle( $s );
if ( !$this->checkUnicodeCompliantBrowser() ) {
- $this->mArticle->setOldSubtitle();
$wgOut->addWikiText( wfMsg( 'nonunicodebrowser') );
}
if ( isset( $this->mArticle )
&& isset( $this->mArticle->mRevision )
&& !$this->mArticle->mRevision->isCurrent() ) {
- $this->mArticle->setOldSubtitle();
+ $this->mArticle->setOldSubtitle( $this->mArticle->mRevision->getId() );
$wgOut->addWikiText( wfMsg( 'editingold' ) );
}
}
$checkboxhtml = $minoredithtml . $watchhtml;
- $wgOut->addHTML( '<div id="wikiPreview">' );
- if ( 'preview' == $this->formtype) {
- $previewOutput = $this->getPreviewText();
- if ( $wgUser->getOption('previewontop' ) ) {
- $wgOut->addHTML( $previewOutput );
- if($this->mTitle->getNamespace() == NS_CATEGORY) {
- $this->mArticle->closeShowCategory();
- }
- $wgOut->addHTML( "<br style=\"clear:both;\" />\n" );
- }
+ if ( 'preview' == $this->formtype && $wgUser->getOption( 'previewontop' ) ) {
+ $this->showPreview();
}
- $wgOut->addHTML( '</div>' );
if ( 'diff' == $this->formtype ) {
if ( $wgUser->getOption('previewontop' ) ) {
$wgOut->addHTML( $this->getDiff() );
if ( $this->isConflict ) {
require_once( "DifferenceEngine.php" );
$wgOut->addWikiText( '==' . wfMsg( "yourdiff" ) . '==' );
- DifferenceEngine::showDiff( $this->textbox2, $this->textbox1,
- wfMsg( "yourtext" ), wfMsg( "storedversion" ) );
+
+ $de = new DifferenceEngine( $this->mTitle );
+ $de->setText( $this->textbox2, $this->textbox1 );
+ $de->showDiff( wfMsg( "yourtext" ), wfMsg( "storedversion" ) );
$wgOut->addWikiText( '==' . wfMsg( "yourtext" ) . '==' );
$wgOut->addHTML( "<textarea tabindex=6 id='wpTextbox2' name=\"wpTextbox2\" rows='{$rows}' cols='{$cols}' wrap='virtual'>"
}
$wgOut->addHTML( "</form>\n" );
if ( $this->formtype == 'preview' && !$wgUser->getOption( 'previewontop' ) ) {
- $wgOut->addHTML( '<div id="wikiPreview">' . $previewOutput . '</div>' );
+ $this->showPreview();
}
if ( $this->formtype == 'diff' && !$wgUser->getOption( 'previewontop' ) ) {
#$wgOut->addHTML( '<div id="wikiPreview">' . $difftext . '</div>' );
wfProfileOut( $fname );
}
+
+ /**
+ * Append preview output to $wgOut.
+ * Includes category rendering if this is a category page.
+ * @access private
+ */
+ function showPreview() {
+ global $wgOut;
+ $wgOut->addHTML( '<div id="wikiPreview">' );
+ if($this->mTitle->getNamespace() == NS_CATEGORY) {
+ $this->mArticle->openShowCategory();
+ }
+ $previewOutput = $this->getPreviewText();
+ $wgOut->addHTML( $previewOutput );
+ if($this->mTitle->getNamespace() == NS_CATEGORY) {
+ $this->mArticle->closeShowCategory();
+ }
+ $wgOut->addHTML( "<br style=\"clear:both;\" />\n" );
+ $wgOut->addHTML( '</div>' );
+ }
/**
* Prepare a list of templates used by this page. Returns HTML.
$fname = 'EditPage::getPreviewText';
wfProfileIn( $fname );
+ if ( $this->mTokenOk ) {
+ $msg = 'previewnote';
+ } else {
+ $msg = 'session_fail_preview';
+ }
$previewhead = '<h2>' . htmlspecialchars( wfMsg( 'preview' ) ) . "</h2>\n" .
- "<div class='previewnote'>" . $wgOut->parse( wfMsg( 'previewnote' ) ) . "</div>\n";
+ "<div class='previewnote'>" . $wgOut->parse( wfMsg( $msg ) ) . "</div>\n";
if ( $this->isConflict ) {
$previewhead.='<h2>' . htmlspecialchars( wfMsg( 'previewconflict' ) ) . "</h2>\n";
}
$this->section, $this->textbox1, $this->summary, $this->edittime );
$oldtitle = wfMsg( 'currentrev' );
$newtitle = wfMsg( 'yourtext' );
- if ( $oldtext != wfMsg( $wgUser->isLoggedIn() ? 'noarticletext' : 'noarticletextanon' ) || $newtext != '' ) {
- $difftext = DifferenceEngine::getDiff( $oldtext, $newtext, $oldtitle, $newtitle );
+ if ( $oldtext !== false || $newtext != '' ) {
+ $de = new DifferenceEngine( $this->mTitle );
+ $de->setText( $oldtext, $newtext );
+ $difftext = $de->getDiff( $oldtitle, $newtitle );
+ } else {
+ $difftext = '';
}
return '<div id="wikiDiff">' . $difftext . '</div>';