X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FEditPage.php;h=6bbeaac9b94bfc8d8ed3c24c0048c3265a3695cd;hb=a52726551b2e0e6106520288d1adb12cc2b864ab;hp=18e99cd29fa745c9054fe2404335a3fb60ea674e;hpb=669b5bd08c70060b1b77ce52e2743deb93d4bf4b;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/EditPage.php b/includes/EditPage.php index 18e99cd29f..6bbeaac9b9 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -23,12 +23,15 @@ class EditPage { var $formtype; var $firsttime; var $lastDelete; - var $mTokenOk = true; + var $mTokenOk = false; + var $mTriedSave = false; var $tooBig = false; var $kblength = false; var $missingComment = false; var $missingSummary = false; var $allowBlankSummary = false; + var $autoSumm = ''; + var $hookError = ''; # Form values var $save = false, $preview = false, $diff = false; @@ -46,6 +49,74 @@ class EditPage { global $wgTitle; $this->mTitle =& $wgTitle; } + + /** + * Fetch initial editing page content. + */ + private function getContent() { + global $wgRequest, $wgParser; + + # Get variables from query string :P + $section = $wgRequest->getVal( 'section' ); + $preload = $wgRequest->getVal( 'preload' ); + + wfProfileIn( __METHOD__ ); + + $text = ''; + if( !$this->mTitle->exists() ) { + + # If requested, preload some text. + $text = $this->getPreloadedText( $preload ); + + # We used to put MediaWiki:Newarticletext here if + # $text was empty at this point. + # This is now shown above the edit box instead. + } else { + // FIXME: may be better to use Revision class directly + // But don't mess with it just yet. Article knows how to + // fetch the page record from the high-priority server, + // which is needed to guarantee we don't pick up lagged + // information. + + $text = $this->mArticle->getContent(); + + if( $section != '' ) { + if( $section == 'new' ) { + $text = $this->getPreloadedText( $preload ); + } else { + $text = $wgParser->getSection( $text, $section ); + } + } + } + + wfProfileOut( __METHOD__ ); + return $text; + } + + /** + * Get the contents of a page from its title and remove includeonly tags + * + * @param $preload String: the title of the page. + * @return string The contents of the page. + */ + private function getPreloadedText($preload) { + if ( $preload === '' ) + return ''; + else { + $preloadTitle = Title::newFromText( $preload ); + if ( isset( $preloadTitle ) && $preloadTitle->userCanRead() ) { + $rev=Revision::newFromTitle($preloadTitle); + if ( is_object( $rev ) ) { + $text = $rev->getText(); + // TODO FIXME: AAAAAAAAAAA, this shouldn't be implementing + // its own mini-parser! -ævar + $text = preg_replace( '~~', '', $text ); + return $text; + } else + return ''; + } + } + } /** * This is the function that extracts metadata from the article body on the first view. @@ -58,7 +129,7 @@ class EditPage { if ( !$wgUseMetadataEdit ) return ; if ( $wgMetadataWhitelist == '' ) return ; $s = '' ; - $t = $this->mArticle->getContent(); + $t = $this->getContent(); # MISSING : filtering @@ -182,7 +253,7 @@ class EditPage { if ( ! $this->mTitle->userCanEdit() ) { wfDebug( "$fname: user can't edit\n" ); - $wgOut->readOnlyPage( $this->mArticle->getContent(), true ); + $wgOut->readOnlyPage( $this->getContent(), true ); wfProfileOut( $fname ); return; } @@ -191,7 +262,7 @@ class EditPage { # When previewing, don't check blocked state - will get caught at save time. # Also, check when starting edition is done against slave to improve performance. wfDebug( "$fname: user is blocked\n" ); - $wgOut->blockedPage(); + $this->blockedPage(); wfProfileOut( $fname ); return; } @@ -203,7 +274,7 @@ class EditPage { return; } else { wfDebug( "$fname: read-only page\n" ); - $wgOut->readOnlyPage( $this->mArticle->getContent(), true ); + $wgOut->readOnlyPage( $this->getContent(), true ); wfProfileOut( $fname ); return; } @@ -214,7 +285,7 @@ class EditPage { wfProfileOut($fname); return; } - if ( !$this->mTitle->userCan( 'create' ) && !$this->mTitle->exists() ) { + if ( !$this->mTitle->userCanCreate() && !$this->mTitle->exists() ) { wfDebug( "$fname: no create permission\n" ); $this->noCreatePermission(); wfProfileOut( $fname ); @@ -227,7 +298,7 @@ class EditPage { } else if ( $this->diff ) { $this->formtype = 'diff'; } else { - $wgOut->readOnlyPage( $this->mArticle->getContent() ); + $wgOut->readOnlyPage( $this->getContent() ); wfProfileOut( $fname ); return; } @@ -301,6 +372,8 @@ class EditPage { # checking, etc. if ( 'initial' == $this->formtype || $this->firsttime ) { $this->initialiseForm(); + if( !$this->mTitle->getArticleId() ) + wfRunHooks( 'EditFormPreloadText', array( &$this->textbox1, &$this->mTitle ) ); } $this->showEditForm(); @@ -312,7 +385,7 @@ class EditPage { * Return true if this page should be previewed when the edit form * is initially opened. * @return bool - * @access private + * @private */ function previewOnOpen() { global $wgUser; @@ -324,9 +397,10 @@ class EditPage { /** * @todo document + * @param $request */ function importFormData( &$request ) { - global $wgLang ; + global $wgLang, $wgUser; $fname = 'EditPage::importFormData'; wfProfileIn( $fname ); @@ -355,19 +429,24 @@ class EditPage { $this->preview = $request->getCheck( 'wpPreview' ) || $request->getCheck( 'wpLivePreview' ); $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; - } + // Remember whether a save was requested, so we can indicate + // if we forced preview due to session failure. + $this->mTriedSave = !$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 if ( $this->diff ) { + # Failed token check, but only requested "Show Changes". + wfDebug( "$fname: Failed token check; Show Changes requested.\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 ); @@ -383,8 +462,15 @@ class EditPage { $this->minoredit = $request->getCheck( 'wpMinoredit' ); $this->watchthis = $request->getCheck( 'wpWatchthis' ); - $this->allowBlankSummary = $request->getBool( 'wpIgnoreBlankSummary' ); - + + # Don't force edit summaries when a user is editing their own user or talk page + if( ( $this->mTitle->mNamespace == NS_USER || $this->mTitle->mNamespace == NS_USER_TALK ) && $this->mTitle->getText() == $wgUser->getName() ) { + $this->allowBlankSummary = true; + } else { + $this->allowBlankSummary = $request->getBool( 'wpIgnoreBlankSummary' ); + } + + $this->autoSumm = $request->getText( 'wpAutoSummary' ); } else { # Not a posted form? Start with nothing. wfDebug( "$fname: Not a posted form.\n" ); @@ -416,9 +502,9 @@ class EditPage { /** * Make sure the form isn't faking a user's credentials. * - * @param WebRequest $request + * @param $request WebRequest * @return bool - * @access private + * @private */ function tokenOk( &$request ) { global $wgUser; @@ -432,6 +518,7 @@ class EditPage { return $this->mTokenOk; } + /** */ function showIntro() { global $wgOut, $wgUser; $addstandardintro=true; @@ -482,15 +569,20 @@ class EditPage { wfProfileOut( "$fname-checks" ); return false; } - if ( !wfRunHooks( 'EditFilter', array( &$this, $this->textbox1, $this->section ) ) ) { - # Error messages or other handling should be performed by the filter function + if ( !wfRunHooks( 'EditFilter', array( $this, $this->textbox1, $this->section, &$this->hookError ) ) ) { + # Error messages etc. could be handled within the hook... wfProfileOut( $fname ); wfProfileOut( "$fname-checks" ); return false; + } elseif( $this->hookError != '' ) { + # ...or the hook could be expecting us to produce an error + wfProfileOut( "$fname-checks " ); + wfProfileOut( $fname ); + return true; } if ( $wgUser->isBlockedFrom( $this->mTitle, false ) ) { # Check block state against master, thus 'false'. - $this->blockedIPpage(); + $this->blockedPage(); wfProfileOut( "$fname-checks" ); wfProfileOut( $fname ); return false; @@ -546,7 +638,7 @@ class EditPage { $aid = $this->mTitle->getArticleID( GAID_FOR_UPDATE ); if ( 0 == $aid ) { // Late check for create permission, just in case *PARANOIA* - if ( !$this->mTitle->userCan( 'create' ) ) { + if ( !$this->mTitle->userCanCreate() ) { wfDebug( "$fname: no create permission\n" ); $this->noCreatePermission(); wfProfileOut( $fname ); @@ -560,6 +652,14 @@ class EditPage { return false; } + # If no edit comment was given when creating a new page, and what's being + # created is a redirect, be smart and fill in a neat auto-comment + if( $this->summary == '' ) { + $rt = Title::newFromRedirect( $this->textbox1 ); + if( is_object( $rt ) ) + $this->summary = wfMsgForContent( 'autoredircomment', $rt->getPrefixedText() ); + } + $isComment=($this->section=='new'); $this->mArticle->insertNewArticle( $this->textbox1, $this->summary, $this->minoredit, $this->watchthis, false, $isComment); @@ -631,12 +731,22 @@ class EditPage { return true; } + # If no edit comment was given when turning a page into a redirect, be smart + # and fill in a neat auto-comment + if( $this->summary == '' ) { + $rt = Title::newFromRedirect( $this->textbox1 ); + if( is_object( $rt ) ) + $this->summary = wfMsgForContent( 'autoredircomment', $rt->getPrefixedText() ); + } + # Handle the user preference to force summaries here - if( trim( $this->summary ) == '' && !$this->allowBlankSummary && $wgUser->getOption( 'forceeditsummary' ) ) { - $this->missingSummary = true; - wfProfileOut( $fname ); - return( true ); - } + if( $this->section != 'new' && !$this->allowBlankSummary && $wgUser->getOption( 'forceeditsummary' ) ) { + if( md5( $this->summary ) == $this->autoSumm ) { + $this->missingSummary = true; + wfProfileOut( $fname ); + return( true ); + } + } # All's well wfProfileIn( "$fname-sectionanchor" ); @@ -695,10 +805,10 @@ class EditPage { */ function initialiseForm() { $this->edittime = $this->mArticle->getTimestamp(); - $this->textbox1 = $this->mArticle->getContent(); + $this->textbox1 = $this->getContent(); $this->summary = ''; if ( !$this->mArticle->exists() && $this->mArticle->mTitle->getNamespace() == NS_MEDIAWIKI ) - $this->textbox1 = wfMsgWeirdKey ( $this->mArticle->mTitle->getText() ) ; + $this->textbox1 = wfMsgWeirdKey( $this->mArticle->mTitle->getText() ) ; wfProxyCheck(); } @@ -729,7 +839,7 @@ class EditPage { $wgOut->addWikiText( wfMsg( 'explainconflict' ) ); $this->textbox2 = $this->textbox1; - $this->textbox1 = $this->mArticle->getContent(); + $this->textbox1 = $this->getContent(); $this->edittime = $this->mArticle->getTimestamp(); } else { @@ -738,7 +848,7 @@ class EditPage { $s = wfMsg('editingcomment', $this->mTitle->getPrefixedText() ); } else { $s = wfMsg('editingsection', $this->mTitle->getPrefixedText() ); - if( !$this->preview && !$this->diff ) { + if( !$this->summary && !$this->preview && !$this->diff ) { preg_match( "/^(=+)(.+)\\1/mi", $this->textbox1, $matches ); @@ -759,6 +869,10 @@ class EditPage { if( $this->missingSummary ) { $wgOut->addWikiText( wfMsg( 'missingsummary' ) ); } + + if( !$this->hookError == '' ) { + $wgOut->addWikiText( $this->hookError ); + } if ( !$this->checkUnicodeCompliantBrowser() ) { $wgOut->addWikiText( wfMsg( 'nonunicodebrowser') ); @@ -787,12 +901,18 @@ class EditPage { } if( $this->mTitle->isProtected( 'edit' ) ) { - if( $this->mTitle->isSemiProtected() ) { + # Is the protection due to the namespace, e.g. interface text? + if( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) { + # Yes; remind the user + $notice = wfMsg( 'editinginterface' ); + } elseif( $this->mTitle->isSemiProtected() ) { + # No; semi protected $notice = wfMsg( 'semiprotectedpagewarning' ); if( wfEmptyMsg( 'semiprotectedpagewarning', $notice ) || $notice == '-' ) { $notice = ''; } } else { + # No; regular protection $notice = wfMsg( 'protectedpagewarning' ); } $wgOut->addWikiText( $notice ); @@ -807,8 +927,8 @@ class EditPage { $wgOut->addWikiText( wfMsg( 'longpagewarning', $wgLang->formatNum( $this->kblength ) ) ); } - $rows = $wgUser->getOption( 'rows' ); - $cols = $wgUser->getOption( 'cols' ); + $rows = $wgUser->getIntOption( 'rows' ); + $cols = $wgUser->getIntOption( 'cols' ); $ew = $wgUser->getOption( 'editwidth' ); if ( $ew ) $ew = " style=\"width:100%\""; @@ -820,12 +940,12 @@ class EditPage { $summary = wfMsg('summary'); $subject = wfMsg('subject'); - $minor = wfMsg('minoredit'); - $watchthis = wfMsg ('watchthis'); + $minor = wfMsgExt('minoredit', array('parseinline')); + $watchthis = wfMsgExt('watchthis', array('parseinline')); $cancel = $sk->makeKnownLink( $this->mTitle->getPrefixedText(), - wfMsg('cancel') ); - $edithelpurl = $sk->makeInternalOrExternalUrl( wfMsg( 'edithelppage' )); + wfMsgExt('cancel', array('parseinline')) ); + $edithelpurl = Skin::makeInternalOrExternalUrl( wfMsgForContent( 'edithelppage' )); $edithelp = ''. htmlspecialchars( wfMsg( 'edithelp' ) ).' '. htmlspecialchars( wfMsg( 'newwindow' ) ); @@ -865,8 +985,8 @@ class EditPage { if ( $wgUser->isAllowed('minoredit') ) { $minoredithtml = "minoredit?" checked='checked'":""). - " accesskey='".wfMsg('accesskey-minoredit')."' id='wpMinoredit' />". - ""; + " accesskey='".wfMsg('accesskey-minoredit')."' id='wpMinoredit' />\n". + "\n"; } $watchhtml = ''; @@ -874,9 +994,9 @@ class EditPage { if ( $wgUser->isLoggedIn() ) { $watchhtml = "watchthis?" checked='checked'":""). - " accesskey=\"".htmlspecialchars(wfMsg('accesskey-watch'))."\" id='wpWatchthis' />". + " accesskey=\"".htmlspecialchars(wfMsg('accesskey-watch'))."\" id='wpWatchthis' />\n". ""; + htmlspecialchars(wfMsg('tooltip-watch'))."\">{$watchthis}\n"; } $checkboxhtml = $minoredithtml . $watchhtml; @@ -899,11 +1019,11 @@ class EditPage { # Otherwise, show a summary field at the bottom $summarytext = htmlspecialchars( $wgContLang->recodeForEdit( $this->summary ) ); # FIXME if( $this->section == 'new' ) { - $commentsubject="

"; + $commentsubject="\n
\n
"; $editsummary = ''; } else { $commentsubject = ''; - $editsummary="

"; + $editsummary="\n
\n
"; } # Set focus to the edit box on load, except on preview or diff, where it would interfere with the display @@ -916,8 +1036,7 @@ class EditPage { if ( $wgUseMetadataEdit ) { $metadata = $this->mMetaData ; $metadata = htmlspecialchars( $wgContLang->recodeForEdit( $metadata ) ) ; - $helppage = Title::newFromText( wfMsg( "metadata_page" ) ) ; - $top = wfMsg( 'metadata', $helppage->getLocalURL() ); + $top = wfMsgWikiHtml( 'metadata_help' ); $metadata = $top . "" ; } else $metadata = "" ; @@ -1004,8 +1123,7 @@ class EditPage { $wgOut->addHTML( << +
END ); @@ -1039,8 +1157,8 @@ END {$safemodehtml} "); - $wgOut->addHTML(" -
+ $wgOut->addHTML( +"
{$buttons['save']} {$buttons['preview']} {$buttons['live']} @@ -1070,15 +1188,20 @@ END $wgOut->addHTML( "\n\n" ); } - # If there's no summary, slip in a hidden tag here - # If the user doesn't want to provide one, hitting Save a second time will cause it to go - # through without further hassle + # If a blank edit summary was previously provided, and the appropriate + # user preference is active, pass a hidden tag here. This will stop the + # user being bounced back more than once in the event that a summary + # is not required. if( $this->missingSummary ) { $wgOut->addHTML( "\n" ); } + + # For a bit more sophisticated detection of blank summaries, hash the + # automatic one and pass that in a hidden field. + $autosumm = $this->autoSumm ? $this->autoSumm : md5( $this->summary ); + $wgOut->addHtml( wfHidden( 'wpAutoSummary', $autosumm ) ); if ( $this->isConflict ) { - require_once( "DifferenceEngine.php" ); $wgOut->addWikiText( '==' . wfMsg( "yourdiff" ) . '==' ); $de = new DifferenceEngine( $this->mTitle ); @@ -1110,7 +1233,7 @@ END /** * Append preview output to $wgOut. * Includes category rendering if this is a category page. - * @access private + * @private */ function showPreview() { global $wgOut; @@ -1149,7 +1272,9 @@ END $batch->execute(); # Construct the HTML - $outText = '
'. wfMsg( 'templatesused' ) . '
    '; + $outText = '
    ' . + wfMsgExt( 'templatesused', array( 'parse' ) ) . + '
      '; foreach ( $templates as $titleObj ) { $outText .= '
    • ' . $sk->makeLinkObj( $titleObj ) . '
    • '; } @@ -1170,9 +1295,9 @@ END * of the preview button */ function doLivePreviewScript() { - global $wgStylePath, $wgJsMimeType, $wgOut, $wgTitle; + global $wgStylePath, $wgJsMimeType, $wgStyleVersion, $wgOut, $wgTitle; $wgOut->addHTML( '' . "\n" ); $liveAction = $wgTitle->getLocalUrl( 'action=submit&wpPreview=true&live=true' ); return "return !livePreview(" . @@ -1222,10 +1347,10 @@ END $fname = 'EditPage::getPreviewText'; wfProfileIn( $fname ); - if ( $this->mTokenOk ) { - $msg = 'previewnote'; - } else { + if ( $this->mTriedSave && !$this->mTokenOk ) { $msg = 'session_fail_preview'; + } else { + $msg = 'previewnote'; } $previewhead = '

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

      \n" . "
      " . $wgOut->parse( wfMsg( $msg ) ) . "
      \n"; @@ -1236,9 +1361,17 @@ END $parserOptions = ParserOptions::newFromUser( $wgUser ); $parserOptions->setEditSection( false ); + global $wgRawHtml; + if( $wgRawHtml && !$this->mTokenOk ) { + // Could be an offsite preview attempt. This is very unsafe if + // HTML is enabled, as it could be an attack. + return $wgOut->parse( "
      " . + wfMsg( 'session_fail_preview_html' ) . "
      " ); + } + # don't parse user css/js, show message about preview # XXX: stupid php bug won't let us use $wgTitle->isCssJsSubpage() here - + if ( $this->isCssJsSubpage ) { if(preg_match("/\\.css$/", $wgTitle->getText() ) ) { $previewtext = wfMsg('usercsspreview'); @@ -1251,11 +1384,6 @@ END wfProfileOut( $fname ); return $previewhead; } else { - # if user want to see preview when he edit an article - if( $wgUser->getOption('previewonfirst') and ($this->textbox1 == '')) { - $this->textbox1 = $this->mArticle->getContent(); - } - $toparse = $this->textbox1; # If we're adding a comment, we need to show the @@ -1278,25 +1406,48 @@ END } /** - * @todo document + * Call the stock "user is blocked" page */ - function blockedIPpage() { - global $wgOut; - $wgOut->blockedPage(); + function blockedPage() { + global $wgOut, $wgUser; + $wgOut->blockedPage( false ); # Standard block notice on the top, don't 'return' + + # If the user made changes, preserve them when showing the markup + # (This happens when a user is blocked during edit, for instance) + $first = $this->firsttime || ( !$this->save && $this->textbox1 == '' ); + if( $first ) { + $source = $this->mTitle->exists() ? $this->getContent() : false; + } else { + $source = $this->textbox1; + } + + # Spit out the source or the user's modified version + if( $source !== false ) { + $rows = $wgUser->getOption( 'rows' ); + $cols = $wgUser->getOption( 'cols' ); + $attribs = array( 'id' => 'wpTextbox1', 'name' => 'wpTextbox1', 'cols' => $cols, 'rows' => $rows, 'readonly' => 'readonly' ); + $wgOut->addHtml( '
      ' ); + $wgOut->addWikiText( wfMsg( $first ? 'blockedoriginalsource' : 'blockededitsource', $this->mTitle->getPrefixedText() ) ); + $wgOut->addHtml( wfOpenElement( 'textarea', $attribs ) . htmlspecialchars( $source ) . wfCloseElement( 'textarea' ) ); + } } /** - * @todo document + * Produce the stock "please login to edit pages" page */ function userNotLoggedInPage() { - global $wgOut; - + global $wgUser, $wgOut; + $skin = $wgUser->getSkin(); + + $loginTitle = SpecialPage::getTitleFor( 'Userlogin' ); + $loginLink = $skin->makeKnownLinkObj( $loginTitle, wfMsgHtml( 'loginreqlink' ), 'returnto=' . $this->mTitle->getPrefixedUrl() ); + $wgOut->setPageTitle( wfMsg( 'whitelistedittitle' ) ); - $wgOut->setRobotpolicy( 'noindex,nofollow' ); + $wgOut->setRobotPolicy( 'noindex,nofollow' ); $wgOut->setArticleRelated( false ); - - $wgOut->addWikiText( wfMsg( 'whitelistedittext' ) ); - $wgOut->returnToMain( false ); + + $wgOut->addHtml( wfMsgWikiHtml( 'whitelistedittext', $loginLink ) ); + $wgOut->returnToMain( false, $this->mTitle->getPrefixedUrl() ); } /** @@ -1305,35 +1456,37 @@ END * allowed to edit. */ function userNotConfirmedPage() { - global $wgOut; $wgOut->setPageTitle( wfMsg( 'confirmedittitle' ) ); - $wgOut->setRobotpolicy( 'noindex,nofollow' ); + $wgOut->setRobotPolicy( 'noindex,nofollow' ); $wgOut->setArticleRelated( false ); + $wgOut->addWikiText( wfMsg( 'confirmedittext' ) ); $wgOut->returnToMain( false ); } /** - * @todo document + * Produce the stock "your edit contains spam" page + * + * @param $match Text which triggered one or more filters */ - function spamPage ( $match = false ) - { + function spamPage( $match = false ) { global $wgOut; + $wgOut->setPageTitle( wfMsg( 'spamprotectiontitle' ) ); - $wgOut->setRobotpolicy( 'noindex,nofollow' ); + $wgOut->setRobotPolicy( 'noindex,nofollow' ); $wgOut->setArticleRelated( false ); $wgOut->addWikiText( wfMsg( 'spamprotectiontext' ) ); - if ( $match ) { + if ( $match ) $wgOut->addWikiText( wfMsg( 'spamprotectionmatch', "{$match}" ) ); - } + $wgOut->returnToMain( false ); } /** - * @access private + * @private * @todo document */ function mergeChangesInto( &$editText ){ @@ -1375,7 +1528,7 @@ END * mangle UTF-8 data on form submission. Returns true if Unicode * should make it through, false if it's known to be a problem. * @return bool - * @access private + * @private */ function checkUnicodeCompliantBrowser() { global $wgBrowserBlackList; @@ -1396,7 +1549,7 @@ END * Format an anchor fragment as it would appear for a given section name * @param string $text * @return string - * @access private + * @private */ function sectionAnchor( $text ) { $headline = Sanitizer::decodeCharReferences( $text ); @@ -1484,15 +1637,15 @@ END 'key' => 'M' ), array( 'image' =>'button_math.png', - 'open' => "\\", - 'close' => "\\", + 'open' => "", + 'close' => "<\\/math>", 'sample'=> wfMsg('math_sample'), 'tip' => wfMsg('math_tip'), 'key' => 'C' ), array( 'image' =>'button_nowiki.png', - 'open' => "\\", - 'close' => "\\", + 'open' => "", + 'close' => "<\\/nowiki>", 'sample'=> wfMsg('nowiki_sample'), 'tip' => wfMsg('nowiki_tip'), 'key' => 'N' @@ -1512,9 +1665,9 @@ END 'key' => 'R' ) ); - $toolbar =""; + $toolbar.="\n
"; return $toolbar; } @@ -1572,12 +1725,12 @@ END * @return string HTML */ function getDiff() { - require_once( 'DifferenceEngine.php' ); $oldtext = $this->mArticle->fetchContent(); $newtext = $this->mArticle->replaceSection( $this->section, $this->textbox1, $this->summary, $this->edittime ); - $oldtitle = wfMsg( 'currentrev' ); - $newtitle = wfMsg( 'yourtext' ); + $newtext = $this->mArticle->preSaveTransform( $newtext ); + $oldtitle = wfMsgExt( 'currentrev', array('parseinline') ); + $newtitle = wfMsgExt( 'yourtext', array('parseinline') ); if ( $oldtext !== false || $newtext != '' ) { $de = new DifferenceEngine( $this->mTitle ); $de->setText( $oldtext, $newtext ); @@ -1596,7 +1749,7 @@ END * @param WebRequest $request * @param string $field * @return string - * @access private + * @private */ function safeUnicodeInput( $request, $field ) { $text = rtrim( $request->getText( $field ) ); @@ -1611,7 +1764,7 @@ END * * @param string $text * @return string - * @access private + * @private */ function safeUnicodeOutput( $text ) { global $wgContLang; @@ -1632,7 +1785,7 @@ END * * @param string $invalue * @return string - * @access private + * @private */ function makesafe( $invalue ) { // Armor existing references for reversability. @@ -1674,7 +1827,7 @@ END * * @param string $invalue * @return string - * @access private + * @private */ function unmakesafe( $invalue ) { $result = "";