follow-up r52858: remove unused "global $wgMessageCache;"
[lhc/web/wiklou.git] / includes / EditPage.php
index 9abb776..ecd4bbb 100644 (file)
@@ -103,7 +103,8 @@ class EditPage {
                $this->editFormTextBeforeContent =
                $this->editFormTextAfterWarn =
                $this->editFormTextAfterTools =
-               $this->editFormTextBottom = "";
+               $this->editFormTextBottom =
+               $this->mPreloadText = "";
        }
        
        function getArticle() {
@@ -200,6 +201,11 @@ class EditPage {
                wfProfileOut( __METHOD__ );
                return $text;
        }
+       
+       /** Use this method before edit() to preload some text into the edit box */
+       public function setPreloadedText( $text ) {
+               $this->mPreloadText = $text;
+       }
 
        /**
         * Get the contents of a page from its title and remove includeonly tags
@@ -208,7 +214,9 @@ class EditPage {
         * @return string The contents of the page.
         */
        protected function getPreloadedText( $preload ) {
-               if ( $preload === '' ) {
+               if ( !empty($this->mPreloadText) ) {
+                       return $this->mPreloadText;
+               } elseif ( $preload === '' ) {
                        return '';
                } else {
                        $preloadTitle = Title::newFromText( $preload );
@@ -352,7 +360,7 @@ class EditPage {
         * the newly-edited page.
         */
        function edit() {
-               global $wgOut, $wgUser, $wgRequest;
+               global $wgOut, $wgRequest;
                // Allow extensions to modify/prevent this form or submission
                if ( !wfRunHooks( 'AlternateEdit', array( &$this ) ) ) {
                        return;
@@ -426,7 +434,6 @@ class EditPage {
 
                # Optional notices on a per-namespace and per-page basis
                $editnotice_ns   = 'editnotice-'.$this->mTitle->getNamespace();
-               $editnotice_page = $editnotice_ns.'-'.$this->mTitle->getDBkey();
                if ( !wfEmptyMsg( $editnotice_ns, wfMsgForContent( $editnotice_ns ) ) ) {
                        $wgOut->addWikiText( wfMsgForContent( $editnotice_ns )  );
                }
@@ -439,8 +446,6 @@ class EditPage {
                                        $wgOut->addWikiText( wfMsgForContent( $editnotice_base )  );
                                }
                        }
-               } else if ( !wfEmptyMsg( $editnotice_page, wfMsgForContent( $editnotice_page ) ) ) {
-                       $wgOut->addWikiText( wfMsgForContent( $editnotice_page ) );
                }
 
                # Attempt submission here.  This will check for edit conflicts,
@@ -652,12 +657,16 @@ class EditPage {
                        }
                }
 
+               // FIXME: unused variable?
                $this->oldid = $request->getInt( 'oldid' );
 
                $this->live = $request->getCheck( 'live' );
                $this->editintro = $request->getText( 'editintro' );
 
                wfProfileOut( $fname );
+
+               // Allow extensions to modify form data
+               wfRunHooks( 'EditPage::importFormData', array( &$this ) );
        }
 
        /**
@@ -710,9 +719,9 @@ class EditPage {
                                $wgOut->wrapWikiMsg( '<div class="mw-newarticletextanon">$1</div>', 'newarticletextanon' );
                        }
                }
-               # Give a notice if the user is editing a deleted page...
+               # Give a notice if the user is editing a deleted/moved page...
                if ( !$this->mTitle->exists() ) {
-                       $this->showDeletionLog( $wgOut );
+                       $this->showLogs( $wgOut );
                }
        }
 
@@ -1149,8 +1158,6 @@ class EditPage {
 
                $sk = $wgUser->getSkin();
 
-               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
@@ -1159,6 +1166,8 @@ class EditPage {
                if ( $this->formtype == 'preview' ) {
                        $previewOutput = $this->getPreviewText();
                }
+               
+               wfRunHooks( 'EditPage::showEditForm:initial', array( &$this ) ) ;
 
                $this->setHeaders();
 
@@ -1166,7 +1175,7 @@ class EditPage {
                $wgOut->setArticleRelated( true );
 
                if ( $this->isConflict ) {
-                       $wgOut->addWikiMsg( 'explainconflict' );
+                       $wgOut->wrapWikiMsg( "<div class='mw-explainconflict'>\n$1</div>", 'explainconflict' );
 
                        $this->textbox2 = $this->textbox1;
                        $this->textbox1 = $this->getContent();
@@ -1285,15 +1294,18 @@ class EditPage {
                        $wgOut->addHTML( "</div>\n" );
                }
 
-               $q = 'action='.$this->action;
-               #if ( "no" == $redirect ) { $q .= "&redirect=no"; }
-               $action = $wgTitle->escapeLocalURL( $q );
+               $action = $wgTitle->escapeLocalURL( array( 'action' => $this->action ) );
 
-               $summary = wfMsg( 'summary' );
-               $subject = wfMsg( 'subject' );
+               $summary = wfMsgExt( 'summary', 'parseinline' );
+               $subject = wfMsgExt( 'subject', 'parseinline' );
 
-               $cancel = $sk->makeKnownLink( $wgTitle->getPrefixedText(),
-                               wfMsgExt('cancel', array('parseinline')) );
+               $cancel = $sk->link(
+                       $wgTitle,
+                       wfMsgExt( 'cancel', array( 'parseinline' ) ),
+                       array(),
+                       array(),
+                       array( 'known', 'noclasses' )
+               );
                $separator = wfMsgExt( 'pipe-separator' , 'escapenoentities' );
                $edithelpurl = Skin::makeInternalOrExternalUrl( wfMsgForContent( 'edithelppage' ));
                $edithelp = '<a target="helpwindow" href="'.$edithelpurl.'">'.
@@ -1309,6 +1321,8 @@ class EditPage {
                        $copywarnMsg = array( 'copyrightwarning2',
                                '[[' . wfMsgForContent( 'copyrightpage' ) . ']]' );
                }
+               // Allow for site and per-namespace customization of contribution/copyright notice.
+               wfRunHooks( 'EditPageCopyrightWarning', array( $this->mTitle, &$copywarnMsg ) );
 
                if ( $wgUser->getOption('showtoolbar') and !$this->isCssJsSubpage ) {
                        # prepare toolbar for edit buttons
@@ -1366,13 +1380,14 @@ class EditPage {
                if ( $this->section == 'new' ) {
                        $commentsubject = '';
                        if ( !$wgRequest->getBool( 'nosummary' ) ) {
-                               # Add an ID if 'missingsummary' is triggered to allow styling of the summary line
-                               $summaryMissedID = $this->missingSummary ? ' mw-summarymissed' : '';
+                               # Add a class if 'missingsummary' is triggered to allow styling of the summary line
+                               $summaryClass = $this->missingSummary ? 'mw-summarymissed' : 'mw-summary';
 
                                $commentsubject =
                                        Xml::tags( 'label', array( 'for' => 'wpSummary' ), $subject );
                                $commentsubject =
-                                       Xml::tags( 'span', array( 'id' => "wpSummaryLabel$summaryMissedID" ), $commentsubject );
+                                       Xml::tags( 'span', array( 'class' => $summaryClass, 'id' => "wpSummaryLabel" ),
+                                               $commentsubject );
                                $commentsubject .= '&nbsp;';
                                $commentsubject .= Xml::input( 'wpSummary',
                                                                        60,
@@ -1386,16 +1401,18 @@ class EditPage {
                        $editsummary = "<div class='editOptions'>\n";
                        global $wgParser;
                        $formattedSummary = wfMsgForContent( 'newsectionsummary', $wgParser->stripSectionName( $this->summary ) );
-                       $subjectpreview = $summarytext && $this->preview ? "<div class=\"mw-summary-preview\">". wfMsg('subject-preview') . $sk->commentBlock( $formattedSummary, $this->mTitle, true )."</div>\n" : '';
+                       $subjectpreview = $summarytext && $this->preview ?
+                               "<div class=\"mw-summary-preview\">". wfMsgExt('subject-preview', 'parseinline') . $sk->commentBlock( $formattedSummary, $this->mTitle, true )."</div>\n" : '';
                        $summarypreview = '';
                } else {
                        $commentsubject = '';
 
-                       # Add an ID if 'missingsummary' is triggered to allow styling of the summary line
-                       $summaryMissedID = $this->missingSummary ? ' mw-summarymissed' : '';
+                       # Add a class if 'missingsummary' is triggered to allow styling of the summary line
+                       $summaryClass = $this->missingSummary ? 'mw-summarymissed' : 'mw-summary';
 
                        $editsummary = Xml::tags( 'label', array( 'for' => 'wpSummary' ), $summary );
-                       $editsummary = Xml::tags( 'span', array( 'id' => "wpSummaryLabel$summaryMissedID" ), $editsummary ) . ' ';
+                       $editsummary = Xml::tags( 'span',  array( 'class' => $summaryClass, 'id' => "wpSummaryLabel" ),
+                                       $editsummary ) . ' ';
 
                        $editsummary .= Xml::input( 'wpSummary',
                                60,
@@ -1415,7 +1432,7 @@ class EditPage {
                                $summarypreview =
                                        Xml::tags( 'div',
                                                array( 'class' => 'mw-summary-preview' ),
-                                               wfMsg( 'summary-preview' ) .
+                                               wfMsgExt( 'summary-preview', 'parseinline' ) .
                                                        $sk->commentBlock( $this->summary, $this->mTitle )
                                        );
                        }
@@ -1536,6 +1553,7 @@ END
                $token = htmlspecialchars( $wgUser->editToken() );
                $wgOut->addHTML( "\n<input type='hidden' value=\"$token\" name=\"wpEditToken\" />\n" );
 
+               $this->showTosSummary();
                $this->showEditTools();
 
                $wgOut->addHTML( <<<END
@@ -1674,12 +1692,34 @@ END
        function doLivePreviewScript() {
                global $wgOut, $wgTitle;
                $wgOut->addScriptFile( 'preview.js' );
-               $liveAction = $wgTitle->getLocalUrl( "action={$this->action}&wpPreview=true&live=true" );
+               $liveAction = $wgTitle->getLocalUrl( array(
+                       'action' => $this->action,
+                       'wpPreview' => 'true',
+                       'live' => 'true'
+               ) );
                return "return !lpDoPreview(" .
                        "editform.wpTextbox1.value," .
                        '"' . $liveAction . '"' . ")";
        }
 
+       protected function showTosSummary() {
+               $msg = 'editpage-tos-summary';
+               // Give a chance for site and per-namespace customizations of
+               // terms of service summary link that might exist separately
+               // from the copyright notice.
+               //
+               // This will display between the save button and the edit tools,
+               // so should remain short!
+               wfRunHooks( 'EditPageTosSummary', array( $this->mTitle, &$msg ) );
+               $text = wfMsg( $msg );
+               if( !wfEmptyMsg( $msg, $text ) && $text !== '-' ) {
+                       global $wgOut;
+                       $wgOut->addHTML( '<div class="mw-tos-summary">' );
+                       $wgOut->addWikiMsgArray( $msg, array() );
+                       $wgOut->addHTML( '</div>' );
+               }
+       }
+
        protected function showEditTools() {
                global $wgOut;
                $wgOut->addHTML( '<div class="mw-editTools">' );
@@ -1687,7 +1727,7 @@ END
                $wgOut->addHTML( '</div>' );
        }
 
-       function getLastDelete() {
+       protected function getLastDelete() {
                $dbr = wfGetDB( DB_SLAVE );
                $data = $dbr->selectRow(
                        array( 'logging', 'user' ),
@@ -1699,15 +1739,23 @@ END
                               'log_title',
                               'log_comment',
                               'log_params',
-                              'user_name', ),
+                                  'log_deleted',
+                              'user_name' ),
                        array( 'log_namespace' => $this->mTitle->getNamespace(),
                               'log_title' => $this->mTitle->getDBkey(),
                               'log_type' => 'delete',
                               'log_action' => 'delete',
                               'user_id=log_user' ),
                        __METHOD__,
-                       array( 'LIMIT' => 1, 'ORDER BY' => 'log_timestamp DESC' ) );
-
+                       array( 'LIMIT' => 1, 'ORDER BY' => 'log_timestamp DESC' )
+               );
+               // Quick paranoid permission checks...
+               if( is_object($data) ) {
+                       if( $data->log_deleted & LogPage::DELETED_USER )
+                               $data->user_name = wfMsgHtml('rev-deleted-user');
+                       if( $data->log_deleted & LogPage::DELETED_COMMENT )
+                               $data->log_comment = wfMsgHtml('rev-deleted-comment');
+               }
                return $data;
        }
 
@@ -1790,12 +1838,16 @@ END
                        }
                }
 
-               $previewhead = '<h2>' . htmlspecialchars( wfMsg( 'preview' ) ) . "</h2>\n" .
-                       "<div class='previewnote'>" . $wgOut->parse( $note ) . "</div>\n";
-               if ( $this->isConflict ) {
-                       $previewhead .='<h2>' . htmlspecialchars( wfMsg( 'previewconflict' ) ) . "</h2>\n";
+               if( $this->isConflict ) {
+                       $conflict = '<h2 id="mw-previewconflict">' . htmlspecialchars( wfMsg( 'previewconflict' ) ) . "</h2>\n";
+               } else {
+                       $conflict = '<hr />';
                }
 
+               $previewhead = "<div class='previewnote'>\n" .
+                       '<h2 id="mw-previewheader">' . htmlspecialchars( wfMsg( 'preview' ) ) . "</h2>" .
+                       $wgOut->parse( $note ) . $conflict . "</div>\n";
+
                wfProfileOut( __METHOD__ );
                return $previewhead . $previewHTML;
        }
@@ -1852,7 +1904,13 @@ END
                $skin = $wgUser->getSkin();
 
                $loginTitle = SpecialPage::getTitleFor( 'Userlogin' );
-               $loginLink = $skin->makeKnownLinkObj( $loginTitle, wfMsgHtml( 'loginreqlink' ), 'returnto=' . $wgTitle->getPrefixedUrl() );
+               $loginLink = $skin->link(
+                       $loginTitle,
+                       wfMsgHtml( 'loginreqlink' ),
+                       array(),
+                       array( 'returnto' => $wgTitle->getPrefixedText() ),
+                       array( 'known', 'noclasses' )
+               );
 
                $wgOut->setPageTitle( wfMsg( 'whitelistedittitle' ) );
                $wgOut->setRobotPolicy( 'noindex,nofollow' );
@@ -2122,6 +2180,9 @@ END
 
                $toolbar.="/*]]>*/\n</script>";
                $toolbar.="\n</div>";
+               
+               wfRunHooks( 'EditPageBeforeEditToolbar', array( &$toolbar ) );
+               
                return $toolbar;
        }
 
@@ -2428,20 +2489,22 @@ END
        }
 
        /**
-        * If there are rows in the deletion log for this page, show them,
+        * If there are rows in the deletion/move log for this page, show them,
         * along with a nice little note for the user
         *
         * @param OutputPage $out
         */
-       protected function showDeletionLog( $out ) {
+       protected function showLogs( $out ) {
                global $wgUser;
                $loglist = new LogEventsList( $wgUser->getSkin(), $out );
-               $pager = new LogPager( $loglist, 'delete', false, $this->mTitle->getPrefixedText() );
+               $pager = new LogPager( $loglist, array('move', 'delete'), false,
+                       $this->mTitle->getPrefixedText(), '', array( "log_action != 'revision'" ) );
+
                $count = $pager->getNumRows();
                if ( $count > 0 ) {
                        $pager->mLimit = 10;
                        $out->addHTML( '<div class="mw-warning-with-logexcerpt">' );
-                       $out->addWikiMsg( 'recreate-deleted-warn' );
+                       $out->addWikiMsg( 'recreate-moveddeleted-warn' );
                        $out->addHTML(
                                $loglist->beginLogEventsList() .
                                $pager->getBody() .
@@ -2450,11 +2513,9 @@ END
                        if($count > 10){
                                $out->addHTML( $wgUser->getSkin()->link(
                                        SpecialPage::getTitleFor( 'Log' ),
-                                       wfMsgHtml( 'deletelog-fulllog' ),
+                                       wfMsgHtml( 'log-fulllog' ),
                                        array(),
-                                       array(
-                                               'type' => 'delete',
-                                               'page' => $this->mTitle->getPrefixedText() ) ) );
+                                       array( 'page' => $this->mTitle->getPrefixedText() ) ) );
                        }
                        $out->addHTML( '</div>' );
                        return true;