Wikia code/includes/EditPage.php

From MediaWiki.org
Jump to: navigation, search
--- D:\Programming\SVN\mediawiki\branches\REL1_16\phase3\includes\EditPage.php  2011-07-18 22:31:28.113281300 +0100
+++ D:\Programming\SVN\wikia\trunk\includes\EditPage.php        2011-08-17 15:28:46.476562500 +0100
@@ -75,6 +75,11 @@
        var $edittime = '', $section = '', $starttime = '';
        var $oldid = 0, $editintro = '', $scrolltop = null, $bot = true;
 
+       // wikia changes begin
+       var $login = false, $autosave = false;
+       public $customOutputPage = null;
+       // wikia changes end
+
        # Placeholders for text injection by hooks (must be HTML)
        # extensions should take care to _append_ to the present value
        public $editFormPageTop; // Before even the preview
@@ -179,6 +184,9 @@
                                        !$oldrev->isDeleted( Revision::DELETED_TEXT ) ) {
 
                                        $undotext = $this->mArticle->getUndoText( $undorev, $oldrev );
+
+                                       wfRunHooks( 'EditPage::getContent::end', array( &$this, $undotext, $undorev, $oldrev  ) );
+
                                        if ( $undotext === false ) {
                                                # Warn the user that something went wrong
                                                $this->editFormPageTop .= $wgOut->parse( '<div class="error mw-undo-failure">' . wfMsgNoTrans( 'undo-failure' ) . '</div>' );
@@ -209,6 +217,9 @@
                                }
                        }
                }
+               // wikia changes begin
+               wfRunHooks( 'EditPage::getContent::end', array( &$this, &$text ) );
+               // wikia changes end
 
                wfProfileOut( __METHOD__ );
                return $text;
@@ -239,6 +250,11 @@
                                        // TODO FIXME: AAAAAAAAAAA, this shouldn't be implementing
                                        // its own mini-parser! -ævar
                                        $text = preg_replace( '~</?includeonly>~', '', $text );
+
+                                       // wikia changes begin: Remove <noinclude> - Datrio
+                                       $text = preg_replace( '/<noinclude>.*<\/noinclude>/', '', $text );
+                                       // wikia changes end
+
                                        return $text;
                                } else
                                        return '';
@@ -310,7 +326,12 @@
                        $this->preview = true;
                }
 
+               /* Wikia change begin - @author: Marcin, #BugId: 7845 */
+               global $wgEnableEditPageReskinExt;
+               if ( empty($wgEnableEditPageReskinExt) || !Wikia::isOasis() ) {
                $wgOut->addScriptFile( 'edit.js' );
+               }
+               /* Wikia change end */
 
                if ( $wgUser->getOption( 'uselivepreview', false ) ) {
                        $wgOut->includeJQuery();
@@ -328,6 +349,8 @@
                } else {
                        if ( $this->save ) {
                                $this->formtype = 'save';
+                       } else if ( $this->login ) {
+                               // wikia change but what is purpose for it?
                        } else if ( $this->preview ) {
                                $this->formtype = 'preview';
                        } else if ( $this->diff ) {
@@ -338,6 +361,9 @@
                                        $this->formtype = 'preview';
                                } else {
                                        $this->formtype = 'initial';
+                                       // wikia changes begin
+                                       $this->autosave = $wgRequest->getBool( 'autosave' );
+                                       // wikia changes end
                                }
                        }
                }
@@ -361,7 +387,10 @@
                        $this->showIntro();
 
                if ( $this->mTitle->isTalkPage() ) {
-                       $wgOut->addWikiMsg( 'talkpagetext' );
+                       // Wikia change - start
+                       // BugId:7092
+                       $wgOut->wrapWikiMsg('<div id="talkpagetext">$1</div>',  'talkpagetext');
+                       // Wikia change - end
                }
 
                # Optional notices on a per-namespace and per-page basis
@@ -440,7 +469,12 @@
         * Redirect to the article page if redlink=1
         */
        function readOnlyPage( $source = null, $protected = false, $reasons = array(), $action = null ) {
-               global $wgRequest, $wgOut;
+               global $wgRequest;
+               // Wikia - start - @author: ADi - removed wgOut from global to allow injecting it
+               // define wgOut
+               $wgOut = !empty($this->customOutputPage) ? $this->customOutputPage : $GLOBALS['wgOut'];
+               // Wikia - end
+
                if ( $wgRequest->getBool( 'redlink' ) ) {
                        // The edit page was reached via a red link.
                        // Redirect to the article page and let them click the edit tab if
@@ -596,6 +630,13 @@
                                $this->allowBlankSummary = $request->getBool( 'wpIgnoreBlankSummary' ) || !$wgUser->getOption( 'forceeditsummary');
                        }
 
+                       // wikia changes begin
+                       if ( $request->getBool( 'wpLogin' ) ) {
+                               $this->login = true;
+                               $this->preview = false;
+                       }
+                       // wikia changes end
+
                        $this->autoSumm = $request->getText( 'wpAutoSummary' );
                } else {
                        # Not a posted form? Start with nothing.
@@ -635,6 +676,10 @@
                        // Custom edit intro for new sections
                        $this->section === 'new' ? 'MediaWiki:addsection-editintro' : '' );
 
+               // wikia changes begin
+               wfRunHooks( 'EditPage::importFormData::finished', array( &$this, $request ) );
+               // wikia changes end
+
                wfProfileOut( __METHOD__ );
 
                // Allow extensions to modify form data
@@ -979,6 +1024,7 @@
 
                # Handle the user preference to force summaries here, but not for null edits
                if ( $this->section != 'new' && !$this->allowBlankSummary && 0 != strcmp( $oldtext, $text )
+                       && $wgUser->getOption( 'forceeditsummary')
                        && !Title::newFromRedirect( $text ) ) # check if it's not a redirect
                {
                        if ( md5( $this->summary ) == $this->autoSumm ) {
@@ -1117,7 +1163,18 @@
         */
        function initialiseForm() {
                global $wgUser;
+
+
+               //Wikia Change
+               //https://wikia.fogbugz.com/default.asp?3319#21795
+               if ( ( !empty( $this->mArticle->mRevision ) && $this->mArticle->mRevision->isCurrent() ) || empty( $this->mArticle->mRevision ) ) {
                $this->edittime = $this->mArticle->getTimestamp();
+               } else {
+                       $rev = Revision::newFromTitle( $this->mTitle );
+                       $this->edittime = $rev->getTimestamp();
+               }
+               //
+
                $this->textbox1 = $this->getContent( false );
                // activate checkboxes if user wants them to be always active
                # Sort out the "watch" checkbox
@@ -1196,8 +1253,10 @@
                # Enabled article-related sidebar, toplinks, etc.
                $wgOut->setArticleRelated( true );
 
-               if ( $this->showHeader() === false )
+               if ( $this->showHeader() === false ) {
+                       wfProfileOut( __METHOD__ );
                        return;
+               }
 
                $action = htmlspecialchars($this->getActionURL($wgTitle));
 
@@ -1215,6 +1274,10 @@
                        $this->displayPreviewArea( $previewOutput, true );
                }
 
+               // wikia change begin
+               wfRunHooks( 'EditPage::showEditForm:initial2', array( &$this ) ) ;
+               // wikia change end
+
                $wgOut->addHTML( $this->editFormTextTop );
 
                $templates = $this->getTemplates();
@@ -1233,15 +1296,33 @@
                        $toolbar = '';
                        // @todo move this to a cleaner conditional instead of blanking a variable
                }
+               /* Wikia change begin - @author: macbre */
+               /* Allow EditPageLayout extension to wrap #EditPage section using <form> tag */
+               if (empty($this->dontWrapWithForm)) {
                $wgOut->addHTML( <<<HTML
-{$toolbar}
 <form id="editform" name="editform" method="post" action="$action" enctype="multipart/form-data">
 HTML
 );
+                       global $wgEnableEditPageReskinExt;
+                       if ( empty($wgEnableEditPageReskinExt) ) {
+                               $wgOut->addHTML( '<a name="EditPage"></a>' );
+                       }
+               }
+               /* Wikia change end */
 
+               /* Wikia change begin - @author: Marooned */
+               /* used by captcha, CreatePage and maybe other extensions - moved above the toolbar  */
                if ( is_callable( $formCallback ) ) {
                        call_user_func_array( $formCallback, array( &$wgOut ) );
                }
+               /* Wikia change end */
+
+               /* Wikia change begin - @author: Marooned */
+               /* add possibility to add visible fields inside <form> but before toolbar - used in CreatePage  */
+               wfRunHooks( 'EditPage::showEditForm:beforeToolbar', array( &$this, &$wgOut ) );
+               /* Wikia change end */
+
+               $wgOut->addHTML( "$toolbar" );
 
                wfRunHooks( 'EditPage::showEditForm:fields', array( &$this, &$wgOut ) );
 
@@ -1279,6 +1361,10 @@
                        $wgOut->addHTML( $this->getSummaryPreview( true, $this->summary ) );
                }
 
+               // wikia change begin
+               wfRunHooks ('EditForm:BeforeDisplayingTextbox', array (&$this, &$hidden) ) ;
+               // wikia change end
+
                $wgOut->addHTML( $this->editFormTextBeforeContent );
 
                if ( $this->isConflict ) {
@@ -1291,6 +1377,16 @@
                        $this->showContentForm();
                }
 
+               // wikia change begin
+               wfRunHooks ('EditForm:AfterDisplayingTextbox', array (&$this, &$hidden) ) ;
+
+               $rows = $wgUser->getIntOption( 'rows' );
+               $cols = $wgUser->getIntOption( 'cols' );
+               $ew = $wgUser->getOption( 'editwidth' );
+
+               wfRunHooks( 'EditForm::MultiEdit:Form', array( $rows, $cols, $ew, htmlspecialchars( $this->safeUnicodeOutput( $this->textbox1 ) ) ) );
+               // wikia change end
+
                $wgOut->addHTML( $this->editFormTextAfterContent );
 
                $wgOut->addWikiText( $this->getCopywarn() );
@@ -1304,22 +1400,37 @@
                $this->showTosSummary();
                $this->showEditTools();
 
+               /* Wikia change begin - @author: Marooned */
+               /* Give a possibility to modify hiddencats container using MediaWiki hook  */
                $wgOut->addHTML( <<<HTML
 {$this->editFormTextAfterTools}
 <div class='templatesUsed'>
 {$formattedtemplates}
 </div>
+HTML
+);
+               $categoriesText = <<<HTML
 <div class='hiddencats'>
 {$formattedhiddencats}
 </div>
 HTML
-);
+;
+               wfRunHooks( 'EditPage::CategoryBox', array( &$categoriesText ) );
+               $wgOut->addHTML( $categoriesText );
+               /* Wikia change end */
 
                if ( $this->isConflict )
                        $this->showConflict();
 
                $wgOut->addHTML( $this->editFormTextBottom );
+
+               /* Wikia change begin - @author: macbre */
+               /* Allow EditPageLayout extension to wrap #EditPage section using <form> tag */
+               if (empty($this->dontWrapWithForm)) {
                $wgOut->addHTML( "</form>\n" );
+               }
+               /* Wikia change end */
+
                if ( !$wgUser->getOption( 'previewontop' ) ) {
                        $this->displayPreviewArea( $previewOutput, false );
                }
@@ -1328,7 +1439,12 @@
        }
 
        protected function showHeader() {
-               global $wgOut, $wgUser, $wgTitle, $wgMaxArticleSize, $wgLang;
+               // Wikia - start - @author: wladek - removed wgOut from global to allow injecting it
+               global $wgUser, $wgTitle, $wgMaxArticleSize, $wgLang;
+               // define wgOut
+               $wgOut = !empty($this->customOutputPage) ? $this->customOutputPage : $GLOBALS['wgOut'];
+               // Wikia - end
+
                if ( $this->isConflict ) {
                        $wgOut->wrapWikiMsg( "<div class='mw-explainconflict'>\n$1</div>", 'explainconflict' );
                        $this->edittime = $this->mArticle->getTimestamp();
@@ -1384,9 +1500,14 @@
                                }
 
                                if ( !$this->mArticle->mRevision->isCurrent() ) {
+                                       /* Wikia change begin - @author: Marooned */
+                                       /* Add new hook and condition to allow alternate message to be displayed when editing old revision */
+                                       if ( wfRunHooks( 'EditPage::showEditForm:oldRevisionNotice', array( &$this ) ) ) {
                                        $this->mArticle->setOldSubtitle( $this->mArticle->mRevision->getId() );
                                        $wgOut->addWikiMsg( 'editingold' );
                                }
+                                       /* Wikia change end */
+                               }
                        }
                }
 
@@ -1398,7 +1519,17 @@
                        if ( $this->isCssJsSubpage ) {
                                # Check the skin exists
                                if ( !$this->isValidCssJsSubpage ) {
-                                       $wgOut->addWikiMsg( 'userinvalidcssjstitle', $wgTitle->getSkinFromCssJsSubpage() );
+                                       /* Wikia change begin - @author: Uberfuzzy */
+                                       $CssJsSubSkin = $wgTitle->getSkinFromCssJsSubpage();
+                                       if( $CssJsSubSkin == 'wikia' ) {
+                                               # rt75168, confusing "there is no wikia" message
+                                       } elseif( $CssJsSubSkin == 'global') {
+                                               # confusing "there is no global" message
+                                               #TODO: draft a message about what global css/js is, maybe link to help page if we still have one
+                                       } else {
+                                               $wgOut->addWikiMsg( 'userinvalidcssjstitle', $CssJsSubSkin );
+                                       }
+                                       /* Wikia change end */
                                }
                                if ( $this->formtype !== 'preview' ) {
                                        if ( $this->isCssSubpage )
@@ -1543,8 +1674,12 @@
 
        protected function showFormBeforeText() {
                global $wgOut;
+
+               /* Wikia change begin - @author: Inez */
+               /* Make AjaxLogin work on EditPage without losing user changes */
                $section = htmlspecialchars( $this->section );
                $wgOut->addHTML( <<<INPUTS
+<input type='hidden' value="" name="wpLogin" id="wpLogin" />
 <input type='hidden' value="{$section}" name="wpSection" />
 <input type='hidden' value="{$this->starttime}" name="wpStarttime" />
 <input type='hidden' value="{$this->edittime}" name="wpEdittime" />
@@ -1549,8 +1684,8 @@
 <input type='hidden' value="{$this->starttime}" name="wpStarttime" />
 <input type='hidden' value="{$this->edittime}" name="wpEdittime" />
 <input type='hidden' value="{$this->scrolltop}" name="wpScrolltop" id="wpScrolltop" />
-
 INPUTS
+               /* Wikia change end */
                );
                if ( !$this->checkUnicodeCompliantBrowser() )
                        $wgOut->addHTML(Xml::hidden( 'safemode', '1' ));
@@ -1670,6 +1805,13 @@
 
                $wgOut->addHTML( '</div>' );
 
+               /* Wikia change begin - @author: uknkown */
+               /* TODO: Find out what it is exactly for */
+               if ( $this->autosave ) {
+                       $wgOut->addHTML( "<script type='text/javascript'>document.editform.wpPreview.click();</script>" );
+               }
+               /* Wikia change end */
+
                if ( $this->formtype == 'diff') {
                        $this->showDiff();
                }
@@ -1738,7 +1880,7 @@
 
        protected function showStandardInputs( &$tabindex = 2 ) {
                global $wgOut, $wgUser;
-               $wgOut->addHTML( "<div class='editOptions'>\n" );
+               $wgOut->addHTML( "<div class='editOptions' id='editOptions'>\n" );
 
                if ( $this->section != 'new' ) {
                        $this->showSummaryInput( false, $this->summary );
@@ -1747,6 +1889,11 @@
 
                $checkboxes = $this->getCheckboxes( $tabindex, $wgUser->getSkin(),
                        array( 'minor' => $this->minoredit, 'watch' => $this->watchthis ) );
+
+               // wikia change begin, @author eloy
+               wfRunHooks ( 'EditPage::showEditForm:checkboxes', array ( &$this, &$checkboxes ) ) ;
+               // wikia change end
+
                $wgOut->addHTML( "<div class='editCheckboxes'>" . implode( $checkboxes, "\n" ) . "</div>\n" );
                $wgOut->addHTML( "<div class='editButtons'>\n" );
                $wgOut->addHTML( implode( $this->getEditButtons( $tabindex ), "\n" ) . "\n" );
@@ -1754,7 +1901,7 @@
                $cancel = $this->getCancelLink();
                $separator = wfMsgExt( 'pipe-separator' , 'escapenoentities' );
                $edithelpurl = Skin::makeInternalOrExternalUrl( wfMsgForContent( 'edithelppage' ) );
-               $edithelp = '<a target="helpwindow" href="'.$edithelpurl.'">'.
+               $edithelp = '<a target="helpwindow" href="'.$edithelpurl.'" id="wpEdithelp">'.
                        htmlspecialchars( wfMsg( 'edithelp' ) ).'</a> '.
                        htmlspecialchars( wfMsg( 'newwindow' ) );
                $wgOut->addHTML( "      <span class='editHelp'>{$cancel}{$separator}{$edithelp}</span>\n" );
@@ -1822,6 +1969,16 @@
 
                wfProfileIn( __METHOD__ );
 
+               // wikia change begin
+               // TODO: remove?
+               // @see https://trac.wikia-inc.com/changeset/6028
+               global $wgRequest;
+               if ($wgUser->getOption( 'showtoolbar' ) && !$wgUser->getOption( 'riched_disable' ) && !$this->previewOnOpen() ) {
+                       $oldTextBox1 = $this->textbox1;
+                       $this->importFormData( $wgRequest );
+               }
+               // wikia change end
+
                if ( $this->mTriedSave && !$this->mTokenOk ) {
                        if ( $this->mTokenOkExceptSuffix ) {
                                $note = wfMsg( 'token_suffix_mismatch' );
@@ -1898,6 +2055,11 @@
                        $conflict = '<hr />';
                }
 
+               // wikia change begin
+               // BugId:5451
+               wfRunHooks( 'EditPageGetPreviewNote', array( $this, &$note ) );
+               // wikia change end
+
                $previewhead = "<div class='previewnote'>\n" .
                        '<h2 id="mw-previewheader">' . htmlspecialchars( wfMsg( 'preview' ) ) . "</h2>" .
                        $wgOut->parse( $note ) . $conflict . "</div>\n";
@@ -1925,7 +2087,10 @@
         * Call the stock "user is blocked" page
         */
        function blockedPage() {
-               global $wgOut;
+               // Wikia - start - @author: ADi - removed wgOut from global to allow injecting it
+               // define wgOut
+               $wgOut = !empty($this->customOutputPage) ? $this->customOutputPage : $GLOBALS['wgOut'];
+               // Wikia - end
                $wgOut->blockedPage( false ); # Standard block notice on the top, don't 'return'
 
                # If the user made changes, preserve them when showing the markup
@@ -1956,7 +2121,7 @@
                $loginLink = $skin->link(
                        $loginTitle,
                        wfMsgHtml( 'loginreqlink' ),
-                       array(),
+                       array( 'rel' => 'nofollow' ),
                        array( 'returnto' => $wgTitle->getPrefixedText() ),
                        array( 'known', 'noclasses' )
                );
@@ -2208,7 +2373,11 @@
                                'key'    => 'R'
                        )
                );
-               $toolbar = "<div id='toolbar'>\n";
+
+               // wikia change begin
+               wfRunHooks( 'ToolbarGenerate', array( &$toolarray ) );
+               $toolbar = "<div id='toolbar' style='clear:both'>\n";
+               // wikia change end
 
                $script = '';
                foreach ( $toolarray as $tool ) {
@@ -2229,6 +2398,11 @@
                                array_map( array( 'Xml', 'encodeJsVar' ), $params ) );
                        $script .= "addButton($paramList);\n";
                }
+
+               // wikia change begin
+               $script .= "mwWikiaUploadNamespace = '".$wgContLang->getNsText(NS_IMAGE)."';\nmwWikiaUploadTooltip = '".wfMsg('insertimagetitle')."';\n";
+               // wikia change end
+
                $toolbar .= Html::inlineScript( "\n$script\n" );
 
                $toolbar .= "\n</div>";
@@ -2398,6 +2572,9 @@
                $newtext = $this->mArticle->preSaveTransform( $newtext );
                $oldtitle = wfMsgExt( 'currentrev', array( 'parseinline' ) );
                $newtitle = wfMsgExt( 'yourtext', array( 'parseinline' ) );
+
+               wfRunHooks( 'EditPageBeforeDiffText', array( $this, &$newtext, &$oldtext, &$newtitle, &$oldtitle) );
+
                if ( $oldtext !== false  || $newtext != '' ) {
                        $de = new DifferenceEngine( $this->mTitle );
                        $de->setText( $oldtext, $newtext );