var $mMetaData = '';
# Form values
- var $save = false, $preview = false;
+ var $save = false, $preview = false, $diff = false;
var $minoredit = false, $watchthis = false;
var $textbox1 = '', $textbox2 = '', $summary = '';
var $edittime = '', $section = '';
function extractMetaDataFromArticle ()
{
global $wgUseMetadataEdit , $wgMetadataWhitelist , $wgLang ;
- $this->mMetaData = "" ;
+ $this->mMetaData = '' ;
if ( !$wgUseMetadataEdit ) return ;
if ( $wgMetadataWhitelist == "" ) return ;
- $s = "" ;
+ $s = '' ;
$t = $this->mArticle->getContent ( true ) ;
# MISSING : <nowiki> filtering
$first = array_shift ( $y ) ;
$first = explode ( ":" , $first ) ;
$ns = array_shift ( $first ) ;
- $ns = trim ( str_replace ( "[" , "" , $ns ) ) ;
+ $ns = trim ( str_replace ( '[' , '' , $ns ) ) ;
if ( strlen ( $ns ) == 2 OR strtolower ( $ns ) == $catlow )
{
- $add = "[[" . $ns . ":" . implode ( ":" , $first ) . "]]" ;
+ $add = '[[' . $ns . ':' . implode ( ':' , $first ) . ']]' ;
if ( strtolower ( $ns ) == $catlow ) $cat[] = $add ;
else $ll[] = $add ;
- $x = implode ( "]]" , $y ) ;
+ $x = implode ( ']]' , $y ) ;
$t[$key] = $x ;
$y = trim ( strtolower ( $x ) ) ;
}
}
}
- if ( count ( $cat ) ) $s .= implode ( " " , $cat ) . "\n" ;
- if ( count ( $ll ) ) $s .= implode ( " " , $ll ) . "\n" ;
+ if ( count ( $cat ) ) $s .= implode ( ' ' , $cat ) . "\n" ;
+ if ( count ( $ll ) ) $s .= implode ( ' ' , $ll ) . "\n" ;
$t = implode ( "\n" , $t ) ;
# Load whitelist
{
$isentry = false ;
$x = trim ( $x ) ;
- while ( substr ( $x , 0 , 1 ) == "*" )
+ while ( substr ( $x , 0 , 1 ) == '*' )
{
$isentry = true ;
$x = trim ( substr ( $x , 1 ) ) ;
}
# Templates, but only some
- $t = explode ( "{{" , $t ) ;
+ $t = explode ( '{{' , $t ) ;
$tl = array () ;
foreach ( $t AS $key => $x )
{
- $y = explode ( "}}" , $x , 2 ) ;
+ $y = explode ( '}}' , $x , 2 ) ;
if ( count ( $y ) == 2 )
{
$z = $y[0] ;
- $z = explode ( "|" , $z ) ;
+ $z = explode ( '|' , $z ) ;
$tn = array_shift ( $z ) ;
if ( in_array ( strtolower ( $tn ) , $sat ) )
{
- $tl[] = "{{" . $y[0] . "}}" ;
+ $tl[] = '{{' . $y[0] . '}}' ;
$t[$key] = $y[1] ;
- $y = explode ( "}}" , $y[1] , 2 ) ;
+ $y = explode ( '}}' , $y[1] , 2 ) ;
}
- else $t[$key] = "{{" . $x ;
+ else $t[$key] = '{{' . $x ;
}
- else if ( $key != 0 ) $t[$key] = "{{" . $x ;
+ else if ( $key != 0 ) $t[$key] = '{{' . $x ;
else $t[$key] = $x ;
}
- if ( count ( $tl ) ) $s .= implode ( " " , $tl ) ;
- $t = implode ( "" , $t ) ;
+ if ( count ( $tl ) ) $s .= implode ( ' ' , $tl ) ;
+ $t = implode ( '' , $t ) ;
$t = str_replace ( "\n\n\n" , "\n" , $t ) ;
$this->mArticle->mContent = $t ;
$wgOut->readOnlyPage( $this->mArticle->getContent( true ), true );
return;
}
- if ( !$this->preview && $wgUser->isBlocked( !$this->save ) ) {
+ if ( !$this->preview && !$this->diff && $wgUser->isBlocked( !$this->save ) ) {
# 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.
$this->blockedIPpage();
if ( wfReadOnly() ) {
if( $this->save || $this->preview ) {
$this->editForm( 'preview' );
+ } else if ( $this->diff ) {
+ $this->editForm( 'diff' );
} else {
$wgOut->readOnlyPage( $this->mArticle->getContent( true ) );
}
$this->editForm( 'save' );
} else if ( $this->preview ) {
$this->editForm( 'preview' );
+ } else if ( $this->diff ) {
+ $this->editForm( 'diff' );
} else { # First time through
if( $wgUser->getOption('previewonfirst') ) {
$this->editForm( 'preview', true );
# The unmarked state will be assumed to be a save,
# if the form seems otherwise complete.
$this->preview = $request->getCheck( 'wpPreview' );
+ $this->diff = $request->getCheck( 'wpDiff' );
} else {
# Page might be a hack attempt posted from
# an external site. Preview instead of saving.
$this->preview = true;
}
}
- $this->save = !$this->preview;
+ $this->save = ! ( $this->preview OR $this->diff );
if( !preg_match( '/^\d{14}$/', $this->edittime )) {
$this->edittime = null;
}
$this->edittime = '';
$this->preview = false;
$this->save = false;
+ $this->diff = false;
$this->minoredit = false;
$this->watchthis = false;
}
* is made and all is well do we actually save and redirect to
* the newly-edited page.
*
- * @param string $formtype Type of form either : save, initial or preview
+ * @param string $formtype Type of form either : save, initial, diff or preview
* @param bool $firsttime True to load form data from db
*/
function editForm( $formtype, $firsttime = false ) {
global $wgAllowAnonymousMinor;
global $wgWhitelistEdit;
global $wgSpamRegex, $wgFilterCallback;
- global $wgUseLatin1;
$sk = $wgUser->getSkin();
$isConflict = false;
if ( 'save' == $formtype ) {
# Reintegrate metadata
- if ( $this->mMetaData != "" ) $this->textbox1 .= "\n" . $this->mMetaData ;
- $this->mMetaData = "" ;
+ if ( $this->mMetaData != '' ) $this->textbox1 .= "\n" . $this->mMetaData ;
+ $this->mMetaData = '' ;
# Check for spam
if ( $wgSpamRegex && preg_match( $wgSpamRegex, $this->textbox1, $matches ) ) {
$wgOut->redirect( $this->mTitle->getFullURL() );
return;
}
- if (wfRunHooks('ArticleSave', $this->mArticle, $wgUser, $this->textbox1,
- $this->summary, $this->minoredit, $this->watchthis, NULL))
+ if (wfRunHooks('ArticleSave', array(&$this->mArticle, &$wgUser, &$this->textbox1,
+ &$this->summary, &$this->minoredit, &$this->watchthis, NULL)))
{
$this->mArticle->insertNewArticle( $this->textbox1, $this->summary,
$this->minoredit, $this->watchthis );
- wfRunHooks('ArticleSaveComplete', $this->mArticle, $wgUser, $this->textbox1,
- $this->summary, $this->minoredit, $this->watchthis, NULL);
+ wfRunHooks('ArticleSaveComplete', array(&$this->mArticle, &$wgUser, $this->textbox1,
+ $this->summary, $this->minoredit,
+ $this->watchthis, NULL));
}
return;
}
}
}
- if (wfRunHooks('ArticleSave', $this->mArticle, $wgUser, $text, $this->summary,
- $this->minoredit, $this->watchthis, $sectionanchor))
+ if (wfRunHooks('ArticleSave', array(&$this->mArticle, &$wgUser, &$text,
+ &$this->summary, &$this->minoredit,
+ &$this->watchthis, &$sectionanchor)))
{
# update the article here
if($this->mArticle->updateArticle( $text, $this->summary, $this->minoredit,
$this->watchthis, '', $sectionanchor ))
{
- wfRunHooks('ArticleSaveComplete', $this->mArticle, $wgUser, $text, $this->summary,
- $this->minoredit, $this->watchthis, $sectionanchor);
+ wfRunHooks('ArticleSaveComplete', array(&$this->mArticle, &$wgUser, $text,
+ $this->summary, $this->minoredit,
+ $this->watchthis, $sectionanchor));
return;
}
else
$s = wfMsg( 'editing', $this->mTitle->getPrefixedText() );
}
$wgOut->setPageTitle( $s );
- if ( !$wgUseLatin1 && !$this->checkUnicodeCompliantBrowser() ) {
+ if ( !$this->checkUnicodeCompliantBrowser() ) {
$this->mArticle->setOldSubtitle();
$wgOut->addWikiText( wfMsg( 'nonunicodebrowser') );
}
$watchthis = wfMsg ('watchthis');
$save = wfMsg('savearticle');
$prev = wfMsg('showpreview');
+ $diff = wfMsg('showdiff');
$cancel = $sk->makeKnownLink( $this->mTitle->getPrefixedText(),
wfMsg('cancel') );
global $wgRightsText;
$copywarn = "<div id=\"editpage-copywarn\">\n" .
wfMsg( $wgRightsText ? 'copyrightwarning' : 'copyrightwarning2',
- '[[' . wfMsg( 'copyrightpage' ) . ']]',
+ '[[' . wfMsgForContent( 'copyrightpage' ) . ']]',
$wgRightsText ) . "\n</div>";
if( $wgUser->getOption('showtoolbar') and !$isCssJsSubpage ) {
}
// activate checkboxes if user wants them to be always active
- if( !$this->preview ) {
+ if( !$this->preview && !$this->diff ) {
if( $wgUser->getOption( 'watchdefault' ) ) $this->watchthis = true;
if( $wgUser->getOption( 'minordefault' ) ) $this->minoredit = true;
$wgOut->addHTML( '<div id="wikiPreview">' );
if ( 'preview' == $formtype) {
$previewOutput = $this->getPreviewText( $isConflict, $isCssJsSubpage );
- if( $wgUser->getOption('previewontop' ) ) {
+ if ( $wgUser->getOption('previewontop' ) ) {
$wgOut->addHTML( $previewOutput );
$wgOut->addHTML( "<br style=\"clear:both;\" />\n" );
}
}
$wgOut->addHTML( '</div>' );
+ if ( 'diff' == $formtype ) {
+ $wgOut->addHTML( '<div id="wikiDiff">' );
+ require_once( 'DifferenceEngine.php' );
+ $oldtext = $this->mArticle->getContent( true );
+ $newtext = $this->textbox1;
+ $oldtitle = wfMsg( 'currentrev' );
+ $newtitle = wfMsg( 'yourtext' );
+
+ if ( $oldtext != wfMsg( 'noarticletext' ) || $newtext != '' ) {
+ $difftext = DifferenceEngine::getDiff( $oldtext, $newtext, $oldtitle, $newtitle );
+ }
+ if ( $wgUser->getOption('previewontop' ) ) {
+ $wgOut->addHTML( $difftext );
+ $wgOut->addHTML( "<br style=\"clear:both;\" />\n" );
+ }
+ $wgOut->addHTML( '</div>' );
+ }
+
# if this is a comment, show a subject line at the top, which is also the edit summary.
# Otherwise, show a summary field at the bottom
$editsummary="{$summary}: <input tabindex='3' type='text' value=\"$summarytext\" name=\"wpSummary\" maxlength='200' size='60' /><br />";
}
- if( !$this->preview ) {
+ if( !$this->preview && !$this->diff ) {
# Don't select the edit box on preview; this interferes with seeing what's going on.
$wgOut->setOnloadHandler( 'document.editform.wpTextbox1.focus()' );
}
# Prepare a list of templates used by this page
$templates = '';
- $id = $this->mTitle->getArticleID();
- if ( 0 !== $id ) {
- $db =& wfGetDB( DB_SLAVE );
- $page = $db->tableName( 'page' );
- $links = $db->tableName( 'links' );
- $sql = "SELECT page_namespace,page_title,page_id ".
- "FROM $page,$links WHERE l_to=page_id AND l_from={$id} and page_namespace=".NS_TEMPLATE;
- $res = $db->query( $sql, "EditPage::editform" );
- if ( false !== $res ) {
- if ( $db->numRows( $res ) ) {
- $templates = '<br />'. wfMsg( 'templatesused' ) . '<ul>';
- while ( $row = $db->fetchObject( $res ) ) {
- if ( $titleObj = Title::makeTitle( $row->page_namespace, $row->page_title ) ) {
- $templates .= '<li>' . $sk->makeLinkObj( $titleObj ) . '</li>';
- }
- }
- $templates .= '</ul>';
+ $articleTemplates = $this->mArticle->getUsedTemplates();
+ if ( count( $articleTemplates ) > 0 ) {
+ $templates = '<br />'. wfMsg( 'templatesused' ) . '<ul>';
+ foreach ( $articleTemplates as $tpl ) {
+ if ( $titleObj = Title::makeTitle( NS_TEMPLATE, $tpl ) ) {
+ $templates .= '<li>' . $sk->makeLinkObj( $titleObj ) . '</li>';
}
- $db->freeResult( $res );
}
+ $templates .= '</ul>';
}
global $wgLivePreview, $wgStylePath;
<br />{$editsummary}
{$checkboxhtml}
<input tabindex='5' id='wpSave' type='submit' value=\"{$save}\" name=\"wpSave\" accesskey=\"".wfMsg('accesskey-save')."\"".
-" title=\"".wfMsg('tooltip-save')."\"/>
+" title=\"".wfMsg('tooltip-save')."\"/> 
<input tabindex='6' id='wpPreview' type='submit' $liveOnclick value=\"{$prev}\" name=\"wpPreview\" accesskey=\"".wfMsg('accesskey-preview')."\"".
" title=\"".wfMsg('tooltip-preview')."\"/>
+<input tabindex='6' id='wpDiff' type='submit' value=\"{$diff}\" name=\"wpDiff\" accesskey=\"".wfMsg('accesskey-diff')."\"".
+" title=\"".wfMsg('tooltip-diff')."\"/>
<em>{$cancel}</em> | <em>{$edithelp}</em>{$templates}" );
$wgOut->addWikiText( $copywarn );
$wgOut->addHTML( "
</textarea>" );
}
$wgOut->addHTML( "</form>\n" );
- if($formtype =="preview" && !$wgUser->getOption("previewontop")) {
- $wgOut->addHTML('<div id="wikiPreview">' . $previewOutput . '</div>');
+ if ( $formtype == 'preview' && !$wgUser->getOption( 'previewontop' ) ) {
+ $wgOut->addHTML( '<div id="wikiPreview">' . $previewOutput . '</div>' );
+ }
+ if ( $formtype == 'diff' && !$wgUser->getOption( 'previewontop' ) ) {
+ $wgOut->addHTML( '<div id="wikiPreview">' . $difftext . '</div>' );
}
}
+ function getDiffText() {
+ }
+
+ /**
+ * @todo document
+ */
function getPreviewText( $isConflict, $isCssJsSubpage ) {
- global $wgOut, $wgUser, $wgTitle, $wgParser;
+ global $wgOut, $wgUser, $wgTitle, $wgParser, $wgAllowDiffPreview, $wgEnableDiffPreviewPreference;
$previewhead = '<h2>' . htmlspecialchars( wfMsg( 'preview' ) ) . "</h2>\n" .
"<p class='previewnote'>" . htmlspecialchars( wfMsg( 'previewnote' ) ) . "</p>\n";
if ( $isConflict ) {
$parserOptions = ParserOptions::newFromUser( $wgUser );
$parserOptions->setEditSection( false );
- $parserOptions->setEditSectionOnRightClick( false );
# don't parse user css/js, show message about preview
# XXX: stupid php bug won't let us use $wgTitle->isCssJsSubpage() here
$wgTitle, $parserOptions );
$previewHTML = $parserOutput->mText;
+
$wgOut->addCategoryLinks($parserOutput->getCategoryLinks());
$wgOut->addLanguageLinks($parserOutput->getLanguageLinks());
return $previewhead . $previewHTML;