refactored HTMLForm show() into three methods, in case you want to process a form...
[lhc/web/wiklou.git] / includes / EditPage.php
index 77dc174..f1b5998 100644 (file)
@@ -1223,7 +1223,7 @@ class EditPage {
                if ( $this->showHeader() === false )
                        return;
 
-               $action = htmlspecialchars($this->getActionURL($wgTitle));
+               $action = htmlspecialchars( $this->getActionURL( $wgTitle ) );
 
                if ( $wgUser->getOption( 'showtoolbar' ) and !$this->isCssJsSubpage ) {
                        # prepare toolbar for edit buttons
@@ -1878,17 +1878,30 @@ HTML
                }
 
                # don't parse user css/js, show message about preview
-               # XXX: stupid php bug won't let us use $wgTitle->isCssJsSubpage() here
+               # XXX: stupid php bug won't let us use $wgTitle->isCssJsSubpage() here -- This note has been there since r3530. Sure the bug was fixed time ago?
 
-               if ( $this->isCssJsSubpage ) {
+               if ( $this->isCssJsSubpage || $this->mTitle->isCssOrJsPage() ) {
+                       $level = 'user';
+                       if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
+                               $level = 'site';
+                       }
+
+                       # Used messages to make sure grep find them:
+                       # Messages: usercsspreview, userjspreview, sitecsspreview, sitejspreview
                        if (preg_match( "/\\.css$/", $this->mTitle->getText() ) ) {
-                               $previewtext = "<div id='mw-usercsspreview'>\n" . wfMsg( 'usercsspreview' ) . "\n</div>";
-                       } else if (preg_match( "/\\.js$/", $this->mTitle->getText() ) ) {
-                               $previewtext = "<div id='mw-userjspreview'>\n" . wfMsg( 'userjspreview' ) . "\n</div>";
+                               $previewtext = "<div id='mw-{$level}csspreview'>\n" . wfMsg( "{$level}csspreview" ) . "\n</div>";
+                               $class = "mw-code mw-css";
+                       } elseif (preg_match( "/\\.js$/", $this->mTitle->getText() ) ) {
+                               $previewtext = "<div id='mw-{$level}jspreview'>\n" . wfMsg( "{$level}jspreview" ) . "\n</div>";
+                               $class = "mw-code mw-js";
+                       } else {
+                               throw new MWException( 'A CSS/JS (sub)page but which is not css nor js!' );
                        }
+
                        $parserOptions->setTidy( true );
                        $parserOutput = $wgParser->parse( $previewtext, $this->mTitle, $parserOptions );
                        $previewHTML = $parserOutput->mText;
+                       $previewHTML .= "<pre class=\"$class\" dir=\"ltr\">\n" . htmlspecialchars( $this->textbox1 ) . "\n</pre>\n";
                } else {
                        $rt = Title::newFromRedirectArray( $this->textbox1 );
                        if ( $rt ) {
@@ -2025,6 +2038,7 @@ HTML
         * Produce the stock "your edit contains spam" page
         *
         * @param $match Text which triggered one or more filters
+        * @deprecated Use method spamPageWithContent() instead
         */
        static function spamPage( $match = false ) {
                global $wgOut, $wgTitle;
@@ -2043,6 +2057,38 @@ HTML
                $wgOut->returnToMain( false, $wgTitle );
        }
 
+       /**
+        * Show "your edit contains spam" page with your diff and text
+        *
+        * @param $match Text which triggered one or more filters
+        */
+       public function spamPageWithContent( $match = false ) {
+               global $wgOut, $wgTitle;
+               $this->textbox2 = $this->textbox1;
+
+               $wgOut->setPageTitle( wfMsg( 'spamprotectiontitle' ) );
+               $wgOut->setRobotPolicy( 'noindex,nofollow' );
+               $wgOut->setArticleRelated( false );
+
+               $wgOut->addHTML( '<div id="spamprotected">' );
+               $wgOut->addWikiMsg( 'spamprotectiontext' );
+               if ( $match ) {
+                       $wgOut->addWikiMsg( 'spamprotectionmatch', wfEscapeWikiText( $match ) );
+               }
+               $wgOut->addHTML( '</div>' );
+
+               $wgOut->wrapWikiMsg( '<h2>$1</h2>', "yourdiff" );
+               $de = new DifferenceEngine( $this->mTitle );
+               $de->setText( $this->getContent(), $this->textbox2 );
+               $de->showDiff( wfMsg( "storedversion" ), wfMsg( "yourtext" ) );
+
+               $wgOut->wrapWikiMsg( '<h2>$1</h2>', "yourtext" );
+               $this->showTextbox2();
+
+               $wgOut->addReturnTo( $wgTitle, array( 'action' => 'edit' ) );
+       }
+
+
        /**
         * @private
         * @todo document
@@ -2309,7 +2355,9 @@ HTML
                        );
                        $checkboxes['minor'] =
                                Xml::check( 'wpMinoredit', $checked['minor'], $attribs ) .
-                               "&#160;<label for='wpMinoredit' id='mw-editpage-minoredit'" . $skin->titleAttrib( 'minoredit', 'withaccess' ) . ">{$minorLabel}</label>";
+                               "&#160;<label for='wpMinoredit' id='mw-editpage-minoredit'" .
+                               Xml::expandAttributes( array( 'title' => $skin->titleAttrib( 'minoredit', 'withaccess' ) ) ) .
+                               ">{$minorLabel}</label>";
                }
 
                $watchLabel = wfMsgExt( 'watchthis', array( 'parseinline' ) );
@@ -2322,7 +2370,9 @@ HTML
                        );
                        $checkboxes['watch'] =
                                Xml::check( 'wpWatchthis', $checked['watch'], $attribs ) .
-                               "&#160;<label for='wpWatchthis' id='mw-editpage-watch'" . $skin->titleAttrib( 'watch', 'withaccess' ) . ">{$watchLabel}</label>";
+                               "&#160;<label for='wpWatchthis' id='mw-editpage-watch'" .
+                               Xml::expandAttributes( array( 'title' => $skin->titleAttrib( 'watch', 'withaccess' ) ) ) .
+                               ">{$watchLabel}</label>";
                }
                wfRunHooks( 'EditPageBeforeEditChecks', array( &$this, &$checkboxes, &$tabindex ) );
                return $checkboxes;
@@ -2618,7 +2668,7 @@ HTML
                                return false;
 
                        case self::AS_SPAM_ERROR:
-                               self::spamPage( $resultDetails['spam'] );
+                               $this->spamPageWithContent( $resultDetails['spam'] );
                                return false;
 
                        case self::AS_BLOCKED_PAGE_FOR_USER: