Wikia code/includes/EditPage.php
From MediaWiki.org
< Wikia code | includes
--- 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 );