From: Chad Horohoe Date: Tue, 26 Aug 2008 15:10:52 +0000 (+0000) Subject: Revert 40016, 40021, 40022. Breaks ability to save and has html entities problems. X-Git-Tag: 1.31.0-rc.0~45652 X-Git-Url: https://git.cyclocoop.org/%242?a=commitdiff_plain;h=b3331130714d8d3b4a95e8a8bbb2e25f69461e9a;p=lhc%2Fweb%2Fwiklou.git Revert 40016, 40021, 40022. Breaks ability to save and has html entities problems. --- diff --git a/includes/EditPage.php b/includes/EditPage.php index 132e27cf06..c3baebb4bf 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -44,7 +44,6 @@ class EditPage { var $mArticle; var $mTitle; - var $action; var $mMetaData = ''; var $isConflict = false; var $isCssJsSubpage = false; @@ -62,8 +61,7 @@ class EditPage { var $allowBlankSummary = false; var $autoSumm = ''; var $hookError = ''; - #var $mPreviewTemplates; - var $mParserOutput; + var $mPreviewTemplates; var $mBaseRevision = false; # Form values @@ -94,7 +92,6 @@ class EditPage { function EditPage( $article ) { $this->mArticle =& $article; $this->mTitle = $article->getTitle(); - $this->action = 'submit'; # Placeholders for text injection by hooks (empty per default) $this->editFormPageTop = @@ -1062,29 +1059,6 @@ class EditPage { return true; } - function setHeaders() { - global $wgOut, $wgTitle; - $wgOut->setRobotPolicy( 'noindex,nofollow' ); - if ( $this->formtype == 'preview' ) { - $wgOut->setPageTitleActionText( wfMsg( 'preview' ) ); - } - if ( $this->isConflict ) { - $wgOut->setPageTitle( wfMsg( 'editconflict', $wgTitle->getPrefixedText() ) ); - } elseif( $this->section != '' ) { - $msg = $this->section == 'new' ? 'editingcomment' : 'editingsection'; - $wgOut->setPageTitle( wfMsg( $msg, $wgTitle->getPrefixedText() ) ); - } else { - # Use the title defined by DISPLAYTITLE magic word when present - if( isset($this->mParserOutput) - && ( $dt = $this->mParserOutput->getDisplayTitle() ) !== false ) { - $title = $dt; - } else { - $title = $wgTitle->getPrefixedText(); - } - $wgOut->setPageTitle( wfMsg( 'editing', $title ) ); - } - } - /** * Send the edit form and related headers to $wgOut * @param $formCallback Optional callable that takes an OutputPage @@ -1108,41 +1082,46 @@ class EditPage { wfRunHooks( 'EditPage::showEditForm:initial', array( &$this ) ) ; - #need to parse the preview early so that we know which templates are used, - #otherwise users with "show preview after edit box" will get a blank list - #we parse this near the beginning so that setHeaders can do the title - #setting work instead of leaving it in getPreviewText - $previewOutput = ''; - if ( $this->formtype == 'preview' ) { - $previewOutput = $this->getPreviewText(); - } - - $this->setHeaders(); + $wgOut->setRobotPolicy( 'noindex,nofollow' ); # Enabled article-related sidebar, toplinks, etc. $wgOut->setArticleRelated( true ); + if ( $this->formtype == 'preview' ) { + $wgOut->setPageTitleActionText( wfMsg( 'preview' ) ); + } + if ( $this->isConflict ) { + $s = wfMsg( 'editconflict', $wgTitle->getPrefixedText() ); + $wgOut->setPageTitle( $s ); $wgOut->addWikiMsg( 'explainconflict' ); $this->textbox2 = $this->textbox1; $this->textbox1 = $this->getContent(); $this->edittime = $this->mArticle->getTimestamp(); } else { - if( $this->section != '' && $this->section != 'new' ) { - $matches = array(); - if( !$this->summary && !$this->preview && !$this->diff ) { - preg_match( "/^(=+)(.+)\\1/mi", - $this->textbox1, - $matches ); - if( !empty( $matches[2] ) ) { - global $wgParser; - $this->summary = "/* " . - $wgParser->stripSectionName(trim($matches[2])) . - " */ "; + if( $this->section != '' ) { + if( $this->section == 'new' ) { + $s = wfMsg('editingcomment', $wgTitle->getPrefixedText() ); + } else { + $s = wfMsg('editingsection', $wgTitle->getPrefixedText() ); + $matches = array(); + if( !$this->summary && !$this->preview && !$this->diff ) { + preg_match( "/^(=+)(.+)\\1/mi", + $this->textbox1, + $matches ); + if( !empty( $matches[2] ) ) { + global $wgParser; + $this->summary = "/* " . + $wgParser->stripSectionName(trim($matches[2])) . + " */ "; + } } } + } else { + $s = wfMsg( 'editing', $wgTitle->getPrefixedText() ); } + $wgOut->setPageTitle( $s ); if ( $this->missingComment ) { $wgOut->wrapWikiMsg( '
$1
', 'missingcommenttext' ); @@ -1238,7 +1217,20 @@ class EditPage { $wgOut->addHTML( "\n" ); } - $q = 'action='.$this->action; + #need to parse the preview early so that we know which templates are used, + #otherwise users with "show preview after edit box" will get a blank list + if ( $this->formtype == 'preview' ) { + $previewOutput = $this->getPreviewText(); + } + + $rows = $wgUser->getIntOption( 'rows' ); + $cols = $wgUser->getIntOption( 'cols' ); + + $ew = $wgUser->getOption( 'editwidth' ); + if ( $ew ) $ew = " style=\"width:100%\""; + else $ew = ''; + + $q = 'action=submit'; #if ( "no" == $redirect ) { $q .= "&redirect=no"; } $action = $wgTitle->escapeLocalURL( $q ); @@ -1290,9 +1282,16 @@ class EditPage { $wgOut->addHTML( $this->editFormPageTop ); if ( $wgUser->getOption( 'previewontop' ) ) { - $this->displayPreviewArea( $previewOutput ); - // Spacer for the edit toolbar - $wgOut->addHTML( '


' ); + + if ( 'preview' == $this->formtype ) { + $this->showPreview( $previewOutput ); + } else { + $wgOut->addHTML( '
' ); + } + + if ( 'diff' == $this->formtype ) { + $this->showDiff(); + } } @@ -1331,7 +1330,7 @@ class EditPage { if( !$this->preview && !$this->diff ) { $wgOut->setOnloadHandler( 'document.editform.wpTextbox1.focus()' ); } - $templates = $this->getTemplates(); + $templates = ($this->preview || $this->section != '') ? $this->mPreviewTemplates : $this->mArticle->getUsedTemplates(); $formattedtemplates = $sk->formatTemplates( $templates, $this->preview, $this->section != ''); $hiddencats = $this->mArticle->getHiddenCategories(); @@ -1342,15 +1341,11 @@ class EditPage { $metadata = $this->mMetaData ; $metadata = htmlspecialchars( $wgContLang->recodeForEdit( $metadata ) ) ; $top = wfMsgWikiHtml( 'metadata_help' ); - /* ToDo: Replace with clean code */ - $ew = $wgUser->getOption( 'editwidth' ); - if ( $ew ) $ew = " style=\"width:100%\""; - else $ew = ''; - /* /ToDo */ $metadata = $top . "" ; } else $metadata = "" ; + $hidden = ''; $recreate = ''; if ($this->wasDeletedSinceLastEdit()) { if ( 'save' != $this->formtype ) { @@ -1359,6 +1354,7 @@ class EditPage { // Hide the toolbar and edit area, use can click preview to get it back // Add an confirmation checkbox and explanation. $toolbar = ''; + $hidden = 'type="hidden" style="display:none;"'; $recreate = $wgOut->parse( wfMsg( 'confirmrecreate', $this->lastDelete->user_name , $this->lastDelete->log_comment )); $recreate .= "
". @@ -1392,27 +1388,40 @@ END wfRunHooks( 'EditPage::showEditForm:fields', array( &$this, &$wgOut ) ); // Put these up at the top to ensure they aren't lost on early form submission - $this->showFormBeforeText(); + $wgOut->addHTML( " +section ) . "\" name=\"wpSection\" /> +starttime}\" name=\"wpStarttime\" />\n +edittime}\" name=\"wpEdittime\" />\n +scrolltop}\" name=\"wpScrolltop\" id=\"wpScrolltop\" />\n" ); + + $encodedtext = htmlspecialchars( $this->safeUnicodeOutput( $this->textbox1 ) ); + if( $encodedtext !== '' ) { + // Ensure there's a newline at the end, otherwise adding lines + // is awkward. + // But don't add a newline if the ext is empty, or Firefox in XHTML + // mode will show an extra newline. A bit annoying. + $encodedtext .= "\n"; + } $wgOut->addHTML( <<editFormTextBeforeContent} + END ); - $this->showTextbox1(); $wgOut->wrapWikiMsg( "
\n$1\n
", $copywarnMsg ); - $wgOut->addHTML( <<editFormTextAfterWarn} + $wgOut->addHTML( $this->editFormTextAfterWarn ); + $wgOut->addHTML( " {$metadata} {$editsummary} {$summarypreview} {$checkboxhtml} {$safemodehtml} -END -); +"); $wgOut->addHTML( "
@@ -1436,18 +1445,20 @@ END $token = htmlspecialchars( $wgUser->editToken() ); $wgOut->addHTML( "\n\n" ); - $this->showEditTools(); + $wgOut->addHtml( '
' ); + $wgOut->addWikiMsgArray( 'edittools', array(), array( 'content' ) ); + $wgOut->addHtml( '
' ); + + $wgOut->addHTML( $this->editFormTextAfterTools ); - $wgOut->addHTML( <<editFormTextAfterTools} + $wgOut->addHTML( "
{$formattedtemplates}
{$formattedhiddencats}
-END -); +"); if ( $this->isConflict && wfRunHooks( 'EditPageBeforeConflictDiff', array( &$this, &$wgOut ) ) ) { $wgOut->wrapWikiMsg( '==$1==', "yourdiff" ); @@ -1457,76 +1468,26 @@ END $de->showDiff( wfMsg( "yourtext" ), wfMsg( "storedversion" ) ); $wgOut->wrapWikiMsg( '==$1==', "yourtext" ); - $this->showTextbox2(); + $wgOut->addHTML( "" ); } $wgOut->addHTML( $this->editFormTextBottom ); $wgOut->addHTML( "\n" ); if ( !$wgUser->getOption( 'previewontop' ) ) { - $this->displayPreviewArea( $previewOutput ); - } - wfProfileOut( $fname ); - } + if ( $this->formtype == 'preview') { + $this->showPreview( $previewOutput ); + } else { + $wgOut->addHTML( '
' ); + } - protected function showFormBeforeText() { - return " -section ) . "\" name=\"wpSection\" /> -starttime}\" name=\"wpStarttime\" />\n -edittime}\" name=\"wpEdittime\" />\n -scrolltop}\" name=\"wpScrolltop\" id=\"wpScrolltop\" />\n"; - } - - protected function showTextbox1() { - $attribs = array( 'tabindex' => 1 ); - - if( $this->wasDeletedSinceLastEdit() ) - $attribs['type'] = 'hidden'; - - $this->showTextbox( $this->textbox1, 'wpTextbox1', $attribs ); - } - - protected function showTextbox2() { - $this->showTextbox( $encodedtext, 'wpTextbox2', array( 'tabindex' => 6 ) ); - } - - protected function showTextbox( $content, $name, $attribs = array() ) { - global $wgOut, $wgUser; - - $encodedtext = htmlspecialchars( $this->safeUnicodeOutput( $content ) ); - if( $encodedtext !== '' ) { - // Ensure there's a newline at the end, otherwise adding lines - // is awkward. - // But don't add a newline if the ext is empty, or Firefox in XHTML - // mode will show an extra newline. A bit annoying. - $encodedtext .= "\n"; - } - - $attribs = array( - 'accesskey' => ',', - 'id' => $name, - ); - - if( $wgUser->getOption( 'editwidth' ) ) - $attribs['style'] = 'width: 100%'; - - $wgOut->addHTML( Xml::textarea( - $name, - $encodedtext, - $wgUser->getIntOption( 'cols' ), $wgUser->getIntOption( 'rows' ), - $attribs ) ); - } + if ( $this->formtype == 'diff') { + $this->showDiff(); + } - protected function displayPreviewArea( $previewOutput ) { - global $wgOut; - if ( $this->formtype == 'preview') { - $this->showPreview( $previewOutput ); - } else { - $wgOut->addHTML( '
' ); } - if ( $this->formtype == 'diff') { - $this->showDiff(); - } + wfProfileOut( $fname ); } /** @@ -1563,19 +1524,12 @@ END function doLivePreviewScript() { global $wgOut, $wgTitle; $wgOut->addScriptFile( 'preview.js' ); - $liveAction = $wgTitle->getLocalUrl( "action={$this->action}&wpPreview=true&live=true" ); + $liveAction = $wgTitle->getLocalUrl( 'action=submit&wpPreview=true&live=true' ); return "return !lpDoPreview(" . "editform.wpTextbox1.value," . '"' . $liveAction . '"' . ")"; } - protected function showEditTools() { - global $wgOut; - $wgOut->addHtml( '
' ); - $wgOut->addWikiMsgArray( 'edittools', array(), array( 'content' ) ); - $wgOut->addHtml( '
' ); - } - function getLastDelete() { $dbr = wfGetDB( DB_SLAVE ); $fname = 'EditPage::getLastDelete'; @@ -1615,7 +1569,8 @@ END function getPreviewText() { global $wgOut, $wgUser, $wgTitle, $wgParser, $wgLang, $wgContLang; - wfProfileIn( __METHOD__ ); + $fname = 'EditPage::getPreviewText'; + wfProfileIn( $fname ); if ( $this->mTriedSave && !$this->mTokenOk ) { if ( $this->mTokenOkExceptSuffix ) { @@ -1649,9 +1604,9 @@ END } $parserOptions->setTidy(true); $parserOutput = $wgParser->parse( $previewtext , $this->mTitle, $parserOptions ); - //$wgOut->addHTML( $parserOutput->mText ); + $wgOut->addHTML( $parserOutput->mText ); $previewHTML = ''; - } elseif( $rt = Title::newFromRedirect( $this->textbox1 ) ) { + } else if( $rt = Title::newFromRedirect( $this->textbox1 ) ) { $previewHTML = $this->mArticle->viewRedirect( $rt, false ); } else { $toparse = $this->textbox1; @@ -1688,9 +1643,20 @@ END $this->mTitle, $parserOptions ); $previewHTML = $parserOutput->getText(); - $this->mParserOutput = $parserOutput; $wgOut->addParserOutputNoText( $parserOutput ); + # ParserOutput might have altered the page title, so reset it + # Also, use the title defined by DISPLAYTITLE magic word when present + if( ( $dt = $parserOutput->getDisplayTitle() ) !== false ) { + $wgOut->setPageTitle( wfMsg( 'editing', $dt ) ); + } else { + $wgOut->setPageTitle( wfMsg( 'editing', $wgTitle->getPrefixedText() ) ); + } + + foreach ( $parserOutput->getTemplates() as $ns => $template) + foreach ( array_keys( $template ) as $dbk) + $this->mPreviewTemplates[] = Title::makeTitle($ns, $dbk); + if ( count( $parserOutput->getWarnings() ) ) { $note .= "\n\n" . implode( "\n\n", $parserOutput->getWarnings() ); } @@ -1699,26 +1665,18 @@ END $previewhead = '

' . htmlspecialchars( wfMsg( 'preview' ) ) . "

\n" . "
" . $wgOut->parse( $note ) . "
\n"; if ( $this->isConflict ) { - $previewhead .='

' . htmlspecialchars( wfMsg( 'previewconflict' ) ) . "

\n"; + $previewhead.='

' . htmlspecialchars( wfMsg( 'previewconflict' ) ) . "

\n"; } - wfProfileOut( __METHOD__ ); - return $previewhead . $previewHTML; - } - - function getTemplates() { - if( $this->preview || $this->section != '' ) { - $templates = array(); - if( !isset($this->mParserOutput) ) return $templates; - foreach( $this->mParserOutput->getTemplates() as $ns => $template) { - foreach( array_keys( $template ) as $dbk ) { - $templates[] = Title::makeTitle($ns, $dbk); - } - } - return $templates; + if( $wgUser->getOption( 'previewontop' ) ) { + // Spacer for the edit toolbar + $previewfoot = '


'; } else { - return $this->mArticle->getUsedTemplates(); + $previewfoot = ''; } + + wfProfileOut( $fname ); + return $previewhead . $previewHTML . $previewfoot; } /** @@ -1739,8 +1697,8 @@ END # Spit out the source or the user's modified version if( $source !== false ) { - $rows = $wgUser->getIntOption( 'rows' ); - $cols = $wgUser->getIntOption( 'cols' ); + $rows = $wgUser->getOption( 'rows' ); + $cols = $wgUser->getOption( 'cols' ); $attribs = array( 'id' => 'wpTextbox1', 'name' => 'wpTextbox1', 'cols' => $cols, 'rows' => $rows, 'readonly' => 'readonly' ); $wgOut->addHtml( '
' ); $wgOut->addWikiMsg( $first ? 'blockedoriginalsource' : 'blockededitsource', $this->mTitle->getPrefixedText() );