2004-02-18 02:15:00 +00:00
|
|
|
<?php
|
2004-09-02 23:28:24 +00:00
|
|
|
/**
|
|
|
|
|
* Contain the EditPage class
|
2004-09-03 23:00:01 +00:00
|
|
|
* @package MediaWiki
|
2004-09-19 17:12:31 +00:00
|
|
|
* @version $Id$
|
2004-09-02 23:28:24 +00:00
|
|
|
*/
|
2003-08-02 20:43:11 +00:00
|
|
|
|
2004-09-02 23:28:24 +00:00
|
|
|
/**
|
|
|
|
|
* Splitting edit page/HTML interface from Article...
|
|
|
|
|
* The actual database and text munging is still in Article,
|
|
|
|
|
* but it should get easier to call those from alternate
|
|
|
|
|
* interfaces.
|
2004-09-03 23:00:01 +00:00
|
|
|
*
|
|
|
|
|
* @package MediaWiki
|
2004-09-02 23:28:24 +00:00
|
|
|
*/
|
2003-08-02 20:43:11 +00:00
|
|
|
class EditPage {
|
|
|
|
|
var $mArticle;
|
|
|
|
|
var $mTitle;
|
|
|
|
|
|
2004-03-08 09:09:35 +00:00
|
|
|
# Form values
|
|
|
|
|
var $save = false, $preview = false;
|
|
|
|
|
var $minoredit = false, $watchthis = false;
|
2004-08-22 17:24:50 +00:00
|
|
|
var $textbox1 = '', $textbox2 = '', $summary = '';
|
|
|
|
|
var $edittime = '', $section = '';
|
2004-03-08 09:09:35 +00:00
|
|
|
var $oldid = 0;
|
|
|
|
|
|
2004-09-03 16:51:45 +00:00
|
|
|
/**
|
|
|
|
|
* @todo document
|
|
|
|
|
* @param $article
|
|
|
|
|
*/
|
2003-08-02 20:43:11 +00:00
|
|
|
function EditPage( $article ) {
|
|
|
|
|
$this->mArticle =& $article;
|
|
|
|
|
global $wgTitle;
|
|
|
|
|
$this->mTitle =& $wgTitle;
|
|
|
|
|
}
|
|
|
|
|
|
2004-09-03 16:51:45 +00:00
|
|
|
/**
|
|
|
|
|
* This is the function that gets called for "action=edit".
|
|
|
|
|
*/
|
|
|
|
|
function edit() {
|
2004-03-08 09:09:35 +00:00
|
|
|
global $wgOut, $wgUser, $wgWhitelistEdit, $wgRequest;
|
2004-01-29 22:36:02 +00:00
|
|
|
// this is not an article
|
|
|
|
|
$wgOut->setArticleFlag(false);
|
2003-08-02 20:43:11 +00:00
|
|
|
|
2004-03-08 09:09:35 +00:00
|
|
|
$this->importFormData( $wgRequest );
|
2003-08-02 20:43:11 +00:00
|
|
|
|
|
|
|
|
if ( ! $this->mTitle->userCanEdit() ) {
|
2004-04-30 08:19:59 +00:00
|
|
|
$wgOut->readOnlyPage( $this->mArticle->getContent( true ), true );
|
2003-08-02 20:43:11 +00:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if ( $wgUser->isBlocked() ) {
|
|
|
|
|
$this->blockedIPpage();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2003-08-05 11:04:02 +00:00
|
|
|
if ( !$wgUser->getID() && $wgWhitelistEdit ) {
|
|
|
|
|
$this->userNotLoggedInPage();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2003-08-02 20:43:11 +00:00
|
|
|
if ( wfReadOnly() ) {
|
2004-03-08 09:09:35 +00:00
|
|
|
if( $this->save || $this->preview ) {
|
2004-08-22 17:24:50 +00:00
|
|
|
$this->editForm( 'preview' );
|
2003-08-02 20:43:11 +00:00
|
|
|
} else {
|
2004-04-30 08:19:59 +00:00
|
|
|
$wgOut->readOnlyPage( $this->mArticle->getContent( true ) );
|
2003-08-02 20:43:11 +00:00
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
2004-03-08 09:09:35 +00:00
|
|
|
if ( $this->save ) {
|
2004-08-22 17:24:50 +00:00
|
|
|
$this->editForm( 'save' );
|
2004-09-19 17:09:12 +00:00
|
|
|
} else if ( $this->preview or $wgUser->getOption('previewonfirst')) {
|
2004-08-22 17:24:50 +00:00
|
|
|
$this->editForm( 'preview' );
|
2003-08-02 20:43:11 +00:00
|
|
|
} else { # First time through
|
2004-08-22 17:24:50 +00:00
|
|
|
$this->editForm( 'initial' );
|
2003-08-02 20:43:11 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2004-09-03 16:51:45 +00:00
|
|
|
/**
|
|
|
|
|
* @todo document
|
|
|
|
|
*/
|
2004-03-08 09:09:35 +00:00
|
|
|
function importFormData( &$request ) {
|
|
|
|
|
# These fields need to be checked for encoding.
|
|
|
|
|
# Also remove trailing whitespace, but don't remove _initial_
|
|
|
|
|
# whitespace from the text boxes. This may be significant formatting.
|
2004-08-22 17:24:50 +00:00
|
|
|
$this->textbox1 = rtrim( $request->getText( 'wpTextbox1' ) );
|
|
|
|
|
$this->textbox2 = rtrim( $request->getText( 'wpTextbox2' ) );
|
|
|
|
|
$this->summary = trim( $request->getText( 'wpSummary' ) );
|
2004-03-18 06:56:14 +00:00
|
|
|
|
2004-03-08 09:09:35 +00:00
|
|
|
$this->edittime = $request->getVal( 'wpEdittime' );
|
2004-08-22 17:24:50 +00:00
|
|
|
if( !preg_match( '/^\d{14}$/', $this->edittime )) $this->edittime = '';
|
2004-03-18 06:56:14 +00:00
|
|
|
|
2004-03-08 09:09:35 +00:00
|
|
|
$this->preview = $request->getCheck( 'wpPreview' );
|
2004-04-09 15:24:22 +00:00
|
|
|
$this->save = $request->wasPosted() && !$this->preview;
|
2004-03-08 09:09:35 +00:00
|
|
|
$this->minoredit = $request->getCheck( 'wpMinoredit' );
|
|
|
|
|
$this->watchthis = $request->getCheck( 'wpWatchthis' );
|
2004-03-18 06:56:14 +00:00
|
|
|
|
2004-03-08 09:09:35 +00:00
|
|
|
$this->oldid = $request->getInt( 'oldid' );
|
2004-03-18 06:56:14 +00:00
|
|
|
|
2004-03-08 09:09:35 +00:00
|
|
|
# Section edit can come from either the form or a link
|
|
|
|
|
$this->section = $request->getVal( 'wpSection', $request->getVal( 'section' ) );
|
|
|
|
|
}
|
2004-03-18 06:56:14 +00:00
|
|
|
|
2004-09-03 16:51:45 +00:00
|
|
|
/**
|
|
|
|
|
* Since there is only one text field on the edit form,
|
|
|
|
|
* pressing <enter> will cause the form to be submitted, but
|
|
|
|
|
* the submit button value won't appear in the query, so we
|
|
|
|
|
* Fake it here before going back to edit(). This is kind of
|
|
|
|
|
* ugly, but it helps some old URLs to still work.
|
|
|
|
|
*/
|
|
|
|
|
function submit() {
|
2004-03-08 09:09:35 +00:00
|
|
|
if( !$this->preview ) $this->save = true;
|
2003-08-02 20:43:11 +00:00
|
|
|
|
|
|
|
|
$this->edit();
|
|
|
|
|
}
|
|
|
|
|
|
2004-09-03 16:51:45 +00:00
|
|
|
/**
|
|
|
|
|
* The edit form is self-submitting, so that when things like
|
|
|
|
|
* preview and edit conflicts occur, we get the same form back
|
|
|
|
|
* with the extra stuff added. Only when the final submission
|
|
|
|
|
* 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
|
|
|
|
|
*/
|
|
|
|
|
function editForm( $formtype ) {
|
2003-08-02 20:43:11 +00:00
|
|
|
global $wgOut, $wgUser;
|
2004-02-29 08:43:29 +00:00
|
|
|
global $wgLang, $wgParser, $wgTitle;
|
2004-05-10 13:15:28 +00:00
|
|
|
global $wgAllowAnonymousMinor;
|
|
|
|
|
global $wgWhitelistEdit;
|
2004-06-21 07:41:53 +00:00
|
|
|
global $wgSpamRegex, $wgFilterCallback;
|
2003-08-02 20:43:11 +00:00
|
|
|
|
|
|
|
|
$sk = $wgUser->getSkin();
|
|
|
|
|
$isConflict = false;
|
2004-05-10 13:15:28 +00:00
|
|
|
// css / js subpages of user pages get a special treatment
|
2004-05-20 11:13:51 +00:00
|
|
|
$isCssJsSubpage = (Namespace::getUser() == $wgTitle->getNamespace() and preg_match("/\\.(css|js)$/", $wgTitle->getText() ));
|
2003-08-02 20:43:11 +00:00
|
|
|
|
|
|
|
|
if(!$this->mTitle->getArticleID()) { # new article
|
2004-08-22 17:24:50 +00:00
|
|
|
$wgOut->addWikiText(wfmsg('newarticletext'));
|
2004-03-05 21:44:38 +00:00
|
|
|
}
|
2003-08-02 20:43:11 +00:00
|
|
|
|
2004-03-08 09:39:01 +00:00
|
|
|
if( Namespace::isTalk( $this->mTitle->getNamespace() ) ) {
|
2004-08-22 17:24:50 +00:00
|
|
|
$wgOut->addWikiText(wfmsg('talkpagetext'));
|
2003-08-02 20:43:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Attempt submission here. This will check for edit conflicts,
|
|
|
|
|
# and redundantly check for locked database, blocked IPs, etc.
|
|
|
|
|
# that edit() already checked just in case someone tries to sneak
|
|
|
|
|
# in the back door with a hand-edited submission URL.
|
|
|
|
|
|
2004-08-22 17:24:50 +00:00
|
|
|
if ( 'save' == $formtype ) {
|
2004-05-04 12:49:41 +00:00
|
|
|
# Check for spam
|
2004-08-13 20:52:15 +00:00
|
|
|
if ( $wgSpamRegex && preg_match( $wgSpamRegex, $this->textbox1, $matches ) ) {
|
|
|
|
|
$this->spamPage ( $matches );
|
2004-06-21 07:41:53 +00:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if ( $wgFilterCallback && $wgFilterCallback( $this->mTitle, $this->textbox1, $this->section ) ) {
|
|
|
|
|
# Error messages or other handling should be performed by the filter function
|
|
|
|
|
return;
|
2004-05-04 12:49:41 +00:00
|
|
|
}
|
2003-08-02 20:43:11 +00:00
|
|
|
if ( $wgUser->isBlocked() ) {
|
|
|
|
|
$this->blockedIPpage();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2003-08-05 11:04:02 +00:00
|
|
|
if ( !$wgUser->getID() && $wgWhitelistEdit ) {
|
|
|
|
|
$this->userNotLoggedInPage();
|
|
|
|
|
return;
|
|
|
|
|
}
|
2003-08-02 20:43:11 +00:00
|
|
|
if ( wfReadOnly() ) {
|
|
|
|
|
$wgOut->readOnlyPage();
|
|
|
|
|
return;
|
|
|
|
|
}
|
New edit toolbar for bold, italic, links, headlines, math, images, media,
sigs, horizontal lines (more can be added easily). Select text and click
to apply, or just click to see an example. Mouseover should show speedtips.
Also, access keys for the edit window (ALT+P=Preview, ALT+S=Save) -> Moz+IE
2004-01-11 04:11:43 +00:00
|
|
|
|
2004-03-22 04:38:47 +00:00
|
|
|
# If article is new, insert it.
|
2004-08-20 14:59:49 +00:00
|
|
|
$aid = $this->mTitle->getArticleID( GAID_FOR_UPDATE );
|
2003-08-02 20:43:11 +00:00
|
|
|
if ( 0 == $aid ) {
|
2004-03-08 09:09:35 +00:00
|
|
|
# Don't save a new article if it's blank.
|
2004-08-22 17:24:50 +00:00
|
|
|
if ( ( '' == $this->textbox1 ) ||
|
|
|
|
|
( wfMsg( 'newarticletext' ) == $this->textbox1 ) ) {
|
2004-03-07 07:26:56 +00:00
|
|
|
$wgOut->redirect( $this->mTitle->getFullURL() );
|
2003-08-02 20:43:11 +00:00
|
|
|
return;
|
|
|
|
|
}
|
2004-03-08 09:09:35 +00:00
|
|
|
$this->mArticle->insertNewArticle( $this->textbox1, $this->summary, $this->minoredit, $this->watchthis );
|
2003-08-02 20:43:11 +00:00
|
|
|
return;
|
|
|
|
|
}
|
2004-03-18 15:02:56 +00:00
|
|
|
|
2003-08-02 20:43:11 +00:00
|
|
|
# Article exists. Check for edit conflict.
|
|
|
|
|
|
|
|
|
|
$this->mArticle->clear(); # Force reload of dates, etc.
|
2004-08-20 14:59:49 +00:00
|
|
|
$this->mArticle->forUpdate( true ); # Lock the article
|
2004-03-14 22:28:52 +00:00
|
|
|
|
2004-08-22 17:24:50 +00:00
|
|
|
if( ( $this->section != 'new' ) &&
|
2004-03-14 22:28:52 +00:00
|
|
|
($this->mArticle->getTimestamp() != $this->edittime ) ) {
|
New edit toolbar for bold, italic, links, headlines, math, images, media,
sigs, horizontal lines (more can be added easily). Select text and click
to apply, or just click to see an example. Mouseover should show speedtips.
Also, access keys for the edit window (ALT+P=Preview, ALT+S=Save) -> Moz+IE
2004-01-11 04:11:43 +00:00
|
|
|
$isConflict = true;
|
2003-08-02 20:43:11 +00:00
|
|
|
}
|
2004-03-08 09:09:35 +00:00
|
|
|
$userid = $wgUser->getID();
|
2003-08-02 20:43:11 +00:00
|
|
|
|
2004-09-19 20:58:10 +00:00
|
|
|
if ( $isConflict) {
|
|
|
|
|
$text = $this->mArticle->getTextOfLastEditWithSectionReplacedOrAdded(
|
|
|
|
|
$this->section, $this->textbox1, $this->summary, $this->edittime);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
$text = $this->mArticle->getTextOfLastEditWithSectionReplacedOrAdded(
|
|
|
|
|
$this->section, $this->textbox1, $this->summary);
|
|
|
|
|
}
|
2004-02-26 13:37:26 +00:00
|
|
|
# Suppress edit conflict with self
|
2003-08-02 20:43:11 +00:00
|
|
|
|
2004-03-08 09:09:35 +00:00
|
|
|
if ( ( 0 != $userid ) && ( $this->mArticle->getUser() == $userid ) ) {
|
2003-08-02 20:43:11 +00:00
|
|
|
$isConflict = false;
|
|
|
|
|
} else {
|
|
|
|
|
# switch from section editing to normal editing in edit conflict
|
|
|
|
|
if($isConflict) {
|
2004-05-10 13:15:28 +00:00
|
|
|
# Attempt merge
|
2004-03-14 22:28:52 +00:00
|
|
|
if( $this->mergeChangesInto( $text ) ){
|
2004-03-14 15:05:52 +00:00
|
|
|
// Successful merge! Maybe we should tell the user the good news?
|
|
|
|
|
$isConflict = false;
|
|
|
|
|
} else {
|
2004-08-22 17:24:50 +00:00
|
|
|
$this->section = '';
|
2004-03-14 22:28:52 +00:00
|
|
|
$this->textbox1 = $text;
|
2004-03-14 15:05:52 +00:00
|
|
|
}
|
2003-08-02 20:43:11 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if ( ! $isConflict ) {
|
2004-05-14 13:03:57 +00:00
|
|
|
# All's well
|
|
|
|
|
$sectionanchor = '';
|
|
|
|
|
if( $this->section != '' ) {
|
|
|
|
|
# Try to get a section anchor from the section source, redirect to edited section if header found
|
|
|
|
|
# XXX: might be better to integrate this into Article::getTextOfLastEditWithSectionReplacedOrAdded
|
|
|
|
|
# for duplicate heading checking and maybe parsing
|
|
|
|
|
$hasmatch = preg_match( "/^ *([=]{1,6})(.*?)(\\1) *\\n/i", $this->textbox1, $matches );
|
|
|
|
|
# we can't deal with anchors, includes, html etc in the header for now,
|
|
|
|
|
# headline would need to be parsed to improve this
|
2004-06-01 19:51:22 +00:00
|
|
|
#if($hasmatch and strlen($matches[2]) > 0 and !preg_match( "/[\\['{<>]/", $matches[2])) {
|
|
|
|
|
if($hasmatch and strlen($matches[2]) > 0) {
|
2004-05-14 13:03:57 +00:00
|
|
|
global $wgInputEncoding;
|
|
|
|
|
$headline = do_html_entity_decode( $matches[2], ENT_COMPAT, $wgInputEncoding );
|
2004-06-01 19:51:22 +00:00
|
|
|
# strip out HTML
|
|
|
|
|
$headline = preg_replace( "/<.*?" . ">/","",$headline );
|
2004-05-14 13:03:57 +00:00
|
|
|
$headline = trim( $headline );
|
2004-06-05 10:34:32 +00:00
|
|
|
$sectionanchor = '#'.urlencode( str_replace(' ', '_', $headline ) );
|
|
|
|
|
$replacearray = array(
|
|
|
|
|
'%3A' => ':',
|
|
|
|
|
'%' => '.'
|
|
|
|
|
);
|
|
|
|
|
$sectionanchor = str_replace(array_keys($replacearray),array_values($replacearray),$sectionanchor);
|
2004-05-14 13:03:57 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# update the article here
|
|
|
|
|
if($this->mArticle->updateArticle( $text, $this->summary, $this->minoredit, $this->watchthis, '', $sectionanchor ))
|
2003-08-17 11:58:33 +00:00
|
|
|
return;
|
|
|
|
|
else
|
|
|
|
|
$isConflict = true;
|
2004-05-13 14:17:44 +00:00
|
|
|
}
|
2003-08-02 20:43:11 +00:00
|
|
|
}
|
|
|
|
|
# First time through: get contents, set time for conflict
|
|
|
|
|
# checking, etc.
|
|
|
|
|
|
2004-08-22 17:24:50 +00:00
|
|
|
if ( 'initial' == $formtype ) {
|
2004-03-08 09:09:35 +00:00
|
|
|
$this->edittime = $this->mArticle->getTimestamp();
|
2004-04-30 08:19:59 +00:00
|
|
|
$this->textbox1 = $this->mArticle->getContent( true );
|
2004-08-22 17:24:50 +00:00
|
|
|
$this->summary = '';
|
2004-03-10 14:24:40 +00:00
|
|
|
$this->proxyCheck();
|
2003-08-02 20:43:11 +00:00
|
|
|
}
|
2004-08-22 17:24:50 +00:00
|
|
|
$wgOut->setRobotpolicy( 'noindex,nofollow' );
|
2004-03-18 06:56:14 +00:00
|
|
|
|
2004-01-17 09:49:43 +00:00
|
|
|
# Enabled article-related sidebar, toplinks, etc.
|
|
|
|
|
$wgOut->setArticleRelated( true );
|
2003-08-02 20:43:11 +00:00
|
|
|
|
|
|
|
|
if ( $isConflict ) {
|
2004-08-22 17:24:50 +00:00
|
|
|
$s = wfMsg( 'editconflict', $this->mTitle->getPrefixedText() );
|
2003-08-02 20:43:11 +00:00
|
|
|
$wgOut->setPageTitle( $s );
|
2004-08-22 17:24:50 +00:00
|
|
|
$wgOut->addHTML( wfMsg( 'explainconflict' ) );
|
2003-08-02 20:43:11 +00:00
|
|
|
|
2004-03-08 09:09:35 +00:00
|
|
|
$this->textbox2 = $this->textbox1;
|
2004-04-30 08:19:59 +00:00
|
|
|
$this->textbox1 = $this->mArticle->getContent( true );
|
2004-03-08 09:09:35 +00:00
|
|
|
$this->edittime = $this->mArticle->getTimestamp();
|
2003-08-02 20:43:11 +00:00
|
|
|
} else {
|
2004-08-22 17:24:50 +00:00
|
|
|
$s = wfMsg( 'editing', $this->mTitle->getPrefixedText() );
|
2003-08-02 20:43:11 +00:00
|
|
|
|
2004-08-22 17:24:50 +00:00
|
|
|
if( $this->section != '' ) {
|
|
|
|
|
if( $this->section == 'new' ) {
|
|
|
|
|
$s.=wfMsg('commentedit');
|
2003-08-02 20:43:11 +00:00
|
|
|
} else {
|
2004-08-22 17:24:50 +00:00
|
|
|
$s.=wfMsg('sectionedit');
|
2003-08-02 20:43:11 +00:00
|
|
|
}
|
2004-03-20 01:18:19 +00:00
|
|
|
if(!$this->preview) {
|
|
|
|
|
$sectitle=preg_match("/^=+(.*?)=+/mi",
|
|
|
|
|
$this->textbox1,
|
|
|
|
|
$matches);
|
2004-04-09 10:38:03 +00:00
|
|
|
if( !empty( $matches[1] ) ) {
|
2004-04-09 09:29:47 +00:00
|
|
|
$this->summary = "/* ". trim($matches[1])." */ ";
|
|
|
|
|
}
|
2004-03-20 01:18:19 +00:00
|
|
|
}
|
2003-08-02 20:43:11 +00:00
|
|
|
}
|
|
|
|
|
$wgOut->setPageTitle( $s );
|
2004-03-08 09:09:35 +00:00
|
|
|
if ( $this->oldid ) {
|
2003-08-02 20:43:11 +00:00
|
|
|
$this->mArticle->setOldSubtitle();
|
2004-08-22 17:24:50 +00:00
|
|
|
$wgOut->addHTML( wfMsg( 'editingold' ) );
|
2003-08-02 20:43:11 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if( wfReadOnly() ) {
|
2004-08-22 17:24:50 +00:00
|
|
|
$wgOut->addHTML( '<strong>' .
|
|
|
|
|
wfMsg( 'readonlywarning' ) .
|
2004-05-10 17:14:01 +00:00
|
|
|
"</strong>" );
|
2004-08-22 17:24:50 +00:00
|
|
|
} else if ( $isCssJsSubpage and 'preview' != $formtype) {
|
|
|
|
|
$wgOut->addHTML( wfMsg( 'usercssjsyoucanpreview' ));
|
2003-08-02 20:43:11 +00:00
|
|
|
}
|
|
|
|
|
if( $this->mTitle->isProtected() ) {
|
2004-08-22 17:24:50 +00:00
|
|
|
$wgOut->addHTML( '<strong>' . wfMsg( 'protectedpagewarning' ) .
|
2003-08-02 20:43:11 +00:00
|
|
|
"</strong><br />\n" );
|
|
|
|
|
}
|
|
|
|
|
|
2004-03-08 09:09:35 +00:00
|
|
|
$kblength = (int)(strlen( $this->textbox1 ) / 1024);
|
2003-08-02 20:43:11 +00:00
|
|
|
if( $kblength > 29 ) {
|
2004-08-22 17:24:50 +00:00
|
|
|
$wgOut->addHTML( '<strong>' .
|
2004-08-28 19:08:49 +00:00
|
|
|
wfMsg( 'longpagewarning', $wgLang->formatNum( $kblength ) )
|
2004-08-22 17:24:50 +00:00
|
|
|
. '</strong>' );
|
2003-08-02 20:43:11 +00:00
|
|
|
}
|
New edit toolbar for bold, italic, links, headlines, math, images, media,
sigs, horizontal lines (more can be added easily). Select text and click
to apply, or just click to see an example. Mouseover should show speedtips.
Also, access keys for the edit window (ALT+P=Preview, ALT+S=Save) -> Moz+IE
2004-01-11 04:11:43 +00:00
|
|
|
|
2004-08-22 17:24:50 +00:00
|
|
|
$rows = $wgUser->getOption( 'rows' );
|
|
|
|
|
$cols = $wgUser->getOption( 'cols' );
|
2003-08-02 20:43:11 +00:00
|
|
|
|
2004-08-22 17:24:50 +00:00
|
|
|
$ew = $wgUser->getOption( 'editwidth' );
|
2003-08-02 20:43:11 +00:00
|
|
|
if ( $ew ) $ew = " style=\"width:100%\"";
|
2004-08-22 17:24:50 +00:00
|
|
|
else $ew = '';
|
2003-08-02 20:43:11 +00:00
|
|
|
|
2004-08-22 17:24:50 +00:00
|
|
|
$q = 'action=submit';
|
2004-03-08 09:09:35 +00:00
|
|
|
#if ( "no" == $redirect ) { $q .= "&redirect=no"; }
|
2004-03-07 07:26:56 +00:00
|
|
|
$action = $this->mTitle->escapeLocalURL( $q );
|
2003-08-02 20:43:11 +00:00
|
|
|
|
2004-08-22 17:24:50 +00:00
|
|
|
$summary = wfMsg('summary');
|
|
|
|
|
$subject = wfMsg('subject');
|
|
|
|
|
$minor = wfMsg('minoredit');
|
|
|
|
|
$watchthis = wfMsg ('watchthis');
|
|
|
|
|
$save = wfMsg('savearticle');
|
|
|
|
|
$prev = wfMsg('showpreview');
|
2003-08-02 20:43:11 +00:00
|
|
|
|
2004-05-29 19:52:47 +00:00
|
|
|
$cancel = $sk->makeKnownLink( $this->mTitle->getPrefixedText(),
|
2004-08-22 17:24:50 +00:00
|
|
|
wfMsg('cancel') );
|
2004-06-09 06:59:05 +00:00
|
|
|
$edithelpurl = $sk->makeUrl( wfMsg( 'edithelppage' ));
|
|
|
|
|
$edithelp = '<a target="helpwindow" href="'.$edithelpurl.'">'.
|
|
|
|
|
htmlspecialchars( wfMsg( 'edithelp' ) ).'</a> '.
|
|
|
|
|
htmlspecialchars( wfMsg( 'newwindow' ) );
|
2004-08-18 00:04:06 +00:00
|
|
|
|
|
|
|
|
global $wgRightsText;
|
|
|
|
|
$copywarn = "<div id=\"editpage-copywarn\">\n" .
|
2004-08-22 17:24:50 +00:00
|
|
|
wfMsg( $wgRightsText ? 'copyrightwarning' : 'copyrightwarning2',
|
|
|
|
|
'[[' . wfMsg( 'copyrightpage' ) . ']]',
|
2004-08-18 00:04:06 +00:00
|
|
|
$wgRightsText ) . "\n</div>";
|
2003-08-02 20:43:11 +00:00
|
|
|
|
2004-08-22 17:24:50 +00:00
|
|
|
if( $wgUser->getOption('showtoolbar') and !$isCssJsSubpage ) {
|
2004-08-19 11:43:48 +00:00
|
|
|
# prepare toolbar for edit buttons
|
2004-04-11 23:21:44 +00:00
|
|
|
$toolbar = $sk->getEditToolbar();
|
|
|
|
|
} else {
|
2004-08-22 17:24:50 +00:00
|
|
|
$toolbar = '';
|
New edit toolbar for bold, italic, links, headlines, math, images, media,
sigs, horizontal lines (more can be added easily). Select text and click
to apply, or just click to see an example. Mouseover should show speedtips.
Also, access keys for the edit window (ALT+P=Preview, ALT+S=Save) -> Moz+IE
2004-01-11 04:11:43 +00:00
|
|
|
}
|
|
|
|
|
|
2003-08-02 20:43:11 +00:00
|
|
|
// activate checkboxes if user wants them to be always active
|
2004-03-08 09:09:35 +00:00
|
|
|
if( !$this->preview ) {
|
2004-08-22 17:24:50 +00:00
|
|
|
if( $wgUser->getOption( 'watchdefault' ) ) $this->watchthis = true;
|
|
|
|
|
if( $wgUser->getOption( 'minordefault' ) ) $this->minoredit = true;
|
2004-03-18 06:56:14 +00:00
|
|
|
|
2004-03-08 09:09:35 +00:00
|
|
|
// activate checkbox also if user is already watching the page,
|
|
|
|
|
// require wpWatchthis to be unset so that second condition is not
|
|
|
|
|
// checked unnecessarily
|
|
|
|
|
if( !$this->watchthis && $this->mTitle->userIsWatching() ) $this->watchthis = true;
|
|
|
|
|
}
|
2004-03-18 06:56:14 +00:00
|
|
|
|
2004-08-22 17:24:50 +00:00
|
|
|
$minoredithtml = '';
|
New edit toolbar for bold, italic, links, headlines, math, images, media,
sigs, horizontal lines (more can be added easily). Select text and click
to apply, or just click to see an example. Mouseover should show speedtips.
Also, access keys for the edit window (ALT+P=Preview, ALT+S=Save) -> Moz+IE
2004-01-11 04:11:43 +00:00
|
|
|
|
2004-01-28 22:57:07 +00:00
|
|
|
if ( 0 != $wgUser->getID() || $wgAllowAnonymousMinor ) {
|
|
|
|
|
$minoredithtml =
|
2004-08-19 11:26:44 +00:00
|
|
|
"<input tabindex='3' type='checkbox' value='1' name='wpMinoredit'".($this->minoredit?" checked='checked'":"").
|
|
|
|
|
" accesskey='".wfMsg('accesskey-minoredit')."' id='wpMinoredit' />".
|
|
|
|
|
"<label for='wpMinoredit' title='".wfMsg('tooltip-minoredit')."'>{$minor}</label>";
|
2003-08-02 20:43:11 +00:00
|
|
|
}
|
2004-03-18 06:56:14 +00:00
|
|
|
|
2004-08-22 17:24:50 +00:00
|
|
|
$watchhtml = '';
|
2004-03-18 06:56:14 +00:00
|
|
|
|
2004-01-28 22:57:07 +00:00
|
|
|
if ( 0 != $wgUser->getID() ) {
|
2004-04-09 18:16:29 +00:00
|
|
|
$watchhtml = "<input tabindex='4' type='checkbox' name='wpWatchthis'".($this->watchthis?" checked='checked'":"").
|
2004-08-19 11:26:44 +00:00
|
|
|
" accesskey='".wfMsg('accesskey-watch')."' id='wpWatchthis' />".
|
|
|
|
|
"<label for='wpWatchthis' title='".wfMsg('tooltip-watch')."'>{$watchthis}</label>";
|
2004-01-28 22:57:07 +00:00
|
|
|
}
|
2004-03-18 06:56:14 +00:00
|
|
|
|
2004-08-22 17:24:50 +00:00
|
|
|
$checkboxhtml = $minoredithtml . $watchhtml . '<br />';
|
2003-08-02 20:43:11 +00:00
|
|
|
|
2004-08-22 17:24:50 +00:00
|
|
|
if ( 'preview' == $formtype) {
|
|
|
|
|
$previewhead='<h2>' . wfMsg( 'preview' ) . "</h2>\n<p><center><font color=\"#cc0000\">" .
|
|
|
|
|
wfMsg( 'note' ) . wfMsg( 'previewnote' ) . "</font></center></p>\n";
|
2003-08-02 20:43:11 +00:00
|
|
|
if ( $isConflict ) {
|
2004-08-22 17:24:50 +00:00
|
|
|
$previewhead.='<h2>' . wfMsg( 'previewconflict' ) .
|
2004-08-19 11:26:44 +00:00
|
|
|
"</h2>\n";
|
2003-08-02 20:43:11 +00:00
|
|
|
}
|
New edit toolbar for bold, italic, links, headlines, math, images, media,
sigs, horizontal lines (more can be added easily). Select text and click
to apply, or just click to see an example. Mouseover should show speedtips.
Also, access keys for the edit window (ALT+P=Preview, ALT+S=Save) -> Moz+IE
2004-01-11 04:11:43 +00:00
|
|
|
|
2004-02-29 08:43:29 +00:00
|
|
|
$parserOptions = ParserOptions::newFromUser( $wgUser );
|
|
|
|
|
$parserOptions->setEditSection( false );
|
|
|
|
|
$parserOptions->setEditSectionOnRightClick( false );
|
2004-08-19 11:43:48 +00:00
|
|
|
|
|
|
|
|
# don't parse user css/js, show message about preview
|
|
|
|
|
# XXX: stupid php bug won't let us use $wgTitle->isCssJsSubpage() here
|
|
|
|
|
|
2004-05-10 13:15:28 +00:00
|
|
|
if ( $isCssJsSubpage ) {
|
|
|
|
|
if(preg_match("/\\.css$/", $wgTitle->getText() ) ) {
|
|
|
|
|
$previewtext = wfMsg('usercsspreview');
|
|
|
|
|
} else if(preg_match("/\\.js$/", $wgTitle->getText() ) ) {
|
|
|
|
|
$previewtext = wfMsg('userjspreview');
|
|
|
|
|
}
|
2004-05-27 14:16:02 +00:00
|
|
|
$parserOutput = $wgParser->parse( $previewtext , $wgTitle, $parserOptions );
|
2004-05-10 13:15:28 +00:00
|
|
|
$wgOut->addHTML( $parserOutput->mText );
|
|
|
|
|
} else {
|
2004-09-19 17:09:12 +00:00
|
|
|
# if user want to see preview when he edit an article
|
|
|
|
|
if( $wgUser->getOption('previewonfirst') and ($this->textbox1 == '')) {
|
|
|
|
|
$this->textbox1 = $this->mArticle->getContent(true);
|
|
|
|
|
}
|
|
|
|
|
|
2004-05-27 14:16:02 +00:00
|
|
|
$parserOutput = $wgParser->parse( $this->mArticle->preSaveTransform( $this->textbox1 ) ."\n\n",
|
2004-09-19 17:09:12 +00:00
|
|
|
$wgTitle, $parserOptions );
|
|
|
|
|
|
2004-05-10 13:15:28 +00:00
|
|
|
$previewHTML = $parserOutput->mText;
|
2004-03-18 06:56:14 +00:00
|
|
|
|
2004-08-22 17:24:50 +00:00
|
|
|
if($wgUser->getOption('previewontop')) {
|
2004-05-10 13:15:28 +00:00
|
|
|
$wgOut->addHTML($previewhead);
|
|
|
|
|
$wgOut->addHTML($previewHTML);
|
|
|
|
|
}
|
2004-06-19 06:46:54 +00:00
|
|
|
$wgOut->addCategoryLinks($parserOutput->getCategoryLinks());
|
2004-06-01 18:29:52 +00:00
|
|
|
$wgOut->addLanguageLinks($parserOutput->getLanguageLinks());
|
2004-05-10 13:15:28 +00:00
|
|
|
$wgOut->addHTML( "<br style=\"clear:both;\" />\n" );
|
2003-08-02 20:43:11 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2004-08-19 11:43:48 +00:00
|
|
|
# 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
|
2004-03-08 09:09:35 +00:00
|
|
|
$summarytext = htmlspecialchars( $wgLang->recodeForEdit( $this->summary ) ); # FIXME
|
2004-08-22 17:24:50 +00:00
|
|
|
if( $this->section == 'new' ) {
|
2004-08-19 11:26:44 +00:00
|
|
|
$commentsubject="{$subject}: <input tabindex='1' type='text' value=\"$summarytext\" name=\"wpSummary\" maxlength='200' size='60' /><br />";
|
2004-08-22 17:24:50 +00:00
|
|
|
$editsummary = '';
|
2004-08-19 11:26:44 +00:00
|
|
|
} else {
|
2004-08-22 17:24:50 +00:00
|
|
|
$commentsubject = '';
|
2004-08-19 11:26:44 +00:00
|
|
|
$editsummary="{$summary}: <input tabindex='3' type='text' value=\"$summarytext\" name=\"wpSummary\" maxlength='200' size='60' /><br />";
|
|
|
|
|
}
|
2003-08-02 20:43:11 +00:00
|
|
|
|
2004-03-08 09:09:35 +00:00
|
|
|
if( !$this->preview ) {
|
2004-08-19 11:26:44 +00:00
|
|
|
# Don't select the edit box on preview; this interferes with seeing what's going on.
|
2004-08-22 17:24:50 +00:00
|
|
|
$wgOut->setOnloadHandler( 'document.editform.wpTextbox1.focus()' );
|
2003-12-11 05:52:15 +00:00
|
|
|
}
|
2004-08-19 11:26:44 +00:00
|
|
|
# Prepare a list of templates used by this page
|
|
|
|
|
$db =& wfGetDB( DB_SLAVE );
|
|
|
|
|
$cur = $db->tableName( 'cur' );
|
|
|
|
|
$links = $db->tableName( 'links' );
|
|
|
|
|
$id = $this->mTitle->getArticleID();
|
|
|
|
|
$sql = "SELECT cur_namespace,cur_title,cur_id ".
|
|
|
|
|
"FROM $cur,$links WHERE l_to=cur_id AND l_from={$id} and cur_namespace=".NS_TEMPLATE;
|
|
|
|
|
$res = $db->query( $sql, "EditPage::editform" );
|
|
|
|
|
|
|
|
|
|
if ( $db->numRows( $res ) ) {
|
|
|
|
|
$templates = '<br />'. wfMsg( 'templatesused' ) . '<ul>';
|
|
|
|
|
while ( $row = $db->fetchObject( $res ) ) {
|
|
|
|
|
if ( $titleObj = Title::makeTitle( $row->cur_namespace, $row->cur_title ) ) {
|
|
|
|
|
$templates .= '<li>' . $sk->makeLinkObj( $titleObj ) . '</li>';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$templates .= '</ul>';
|
2004-08-20 15:32:56 +00:00
|
|
|
} else {
|
2004-08-22 17:24:50 +00:00
|
|
|
$templates = '';
|
2004-08-19 11:26:44 +00:00
|
|
|
}
|
2003-08-02 20:43:11 +00:00
|
|
|
$wgOut->addHTML( "
|
New edit toolbar for bold, italic, links, headlines, math, images, media,
sigs, horizontal lines (more can be added easily). Select text and click
to apply, or just click to see an example. Mouseover should show speedtips.
Also, access keys for the edit window (ALT+P=Preview, ALT+S=Save) -> Moz+IE
2004-01-11 04:11:43 +00:00
|
|
|
{$toolbar}
|
2004-04-20 07:27:45 +00:00
|
|
|
<form id=\"editform\" name=\"editform\" method=\"post\" action=\"$action\"
|
2003-08-02 20:43:11 +00:00
|
|
|
enctype=\"application/x-www-form-urlencoded\">
|
|
|
|
|
{$commentsubject}
|
2004-04-29 12:17:33 +00:00
|
|
|
<textarea tabindex='1' accesskey=\",\" name=\"wpTextbox1\" rows='{$rows}'
|
2004-04-09 15:29:11 +00:00
|
|
|
cols='{$cols}'{$ew}>" .
|
2004-03-08 09:09:35 +00:00
|
|
|
htmlspecialchars( $wgLang->recodeForEdit( $this->textbox1 ) ) .
|
2003-08-02 20:43:11 +00:00
|
|
|
"
|
2004-04-29 12:17:33 +00:00
|
|
|
</textarea>
|
2004-04-03 10:01:08 +00:00
|
|
|
<br />{$editsummary}
|
2003-08-02 20:43:11 +00:00
|
|
|
{$checkboxhtml}
|
2004-06-10 18:42:05 +00:00
|
|
|
<input tabindex='5' id='wpSave' type='submit' value=\"{$save}\" name=\"wpSave\" accesskey=\"".wfMsg('accesskey-save')."\"".
|
2004-04-09 19:22:51 +00:00
|
|
|
" title=\"".wfMsg('tooltip-save')."\"/>
|
2004-06-30 07:38:33 +00:00
|
|
|
<input tabindex='6' id='wpPreview' type='submit' value=\"{$prev}\" name=\"wpPreview\" accesskey=\"".wfMsg('accesskey-preview')."\"".
|
2004-04-09 19:22:51 +00:00
|
|
|
" title=\"".wfMsg('tooltip-preview')."\"/>
|
2004-08-19 11:26:44 +00:00
|
|
|
<em>{$cancel}</em> | <em>{$edithelp}</em>{$templates}" );
|
2004-08-18 00:04:06 +00:00
|
|
|
$wgOut->addWikiText( $copywarn );
|
|
|
|
|
$wgOut->addHTML( "
|
2004-04-03 10:01:08 +00:00
|
|
|
<input type='hidden' value=\"" . htmlspecialchars( $this->section ) . "\" name=\"wpSection\" />
|
|
|
|
|
<input type='hidden' value=\"{$this->edittime}\" name=\"wpEdittime\" />\n" );
|
2003-08-02 20:43:11 +00:00
|
|
|
|
|
|
|
|
if ( $isConflict ) {
|
2004-08-21 09:32:34 +00:00
|
|
|
require_once( "DifferenceEngine.php" );
|
2003-08-02 20:43:11 +00:00
|
|
|
$wgOut->addHTML( "<h2>" . wfMsg( "yourdiff" ) . "</h2>\n" );
|
2004-03-14 13:42:16 +00:00
|
|
|
DifferenceEngine::showDiff( $this->textbox2, $this->textbox1,
|
2003-08-02 20:43:11 +00:00
|
|
|
wfMsg( "yourtext" ), wfMsg( "storedversion" ) );
|
|
|
|
|
|
|
|
|
|
$wgOut->addHTML( "<h2>" . wfMsg( "yourtext" ) . "</h2>
|
2004-06-10 18:42:05 +00:00
|
|
|
<textarea tabindex=6 id='wpTextbox2' name=\"wpTextbox2\" rows='{$rows}' cols='{$cols}' wrap='virtual'>"
|
2004-03-14 13:42:16 +00:00
|
|
|
. htmlspecialchars( $wgLang->recodeForEdit( $this->textbox2 ) ) .
|
2003-08-02 20:43:11 +00:00
|
|
|
"
|
2004-04-29 12:17:33 +00:00
|
|
|
</textarea>" );
|
2003-08-02 20:43:11 +00:00
|
|
|
}
|
|
|
|
|
$wgOut->addHTML( "</form>\n" );
|
|
|
|
|
if($formtype =="preview" && !$wgUser->getOption("previewontop")) {
|
|
|
|
|
$wgOut->addHTML($previewhead);
|
2004-02-29 08:43:29 +00:00
|
|
|
$wgOut->addHTML($previewHTML);
|
2003-08-02 20:43:11 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2004-09-03 16:51:45 +00:00
|
|
|
/**
|
|
|
|
|
* @todo document
|
|
|
|
|
*/
|
|
|
|
|
function blockedIPpage() {
|
2004-01-30 17:07:50 +00:00
|
|
|
global $wgOut, $wgUser, $wgLang, $wgIP;
|
2003-08-02 20:43:11 +00:00
|
|
|
|
2004-08-22 17:24:50 +00:00
|
|
|
$wgOut->setPageTitle( wfMsg( 'blockedtitle' ) );
|
|
|
|
|
$wgOut->setRobotpolicy( 'noindex,nofollow' );
|
2004-01-17 09:49:43 +00:00
|
|
|
$wgOut->setArticleRelated( false );
|
2003-08-02 20:43:11 +00:00
|
|
|
|
|
|
|
|
$id = $wgUser->blockedBy();
|
|
|
|
|
$reason = $wgUser->blockedFor();
|
2004-08-20 14:59:49 +00:00
|
|
|
$ip = $wgIP;
|
2004-01-30 17:07:50 +00:00
|
|
|
|
2004-07-10 01:09:36 +00:00
|
|
|
if ( is_numeric( $id ) ) {
|
2004-08-20 14:59:49 +00:00
|
|
|
$name = User::whoIs( $id );
|
2004-07-10 01:09:36 +00:00
|
|
|
} else {
|
|
|
|
|
$name = $id;
|
2004-06-21 07:41:53 +00:00
|
|
|
}
|
2004-08-22 17:24:50 +00:00
|
|
|
$link = '[[' . $wgLang->getNsText( Namespace::getUser() ) .
|
2003-08-02 20:43:11 +00:00
|
|
|
":{$name}|{$name}]]";
|
|
|
|
|
|
2004-08-22 17:24:50 +00:00
|
|
|
$wgOut->addWikiText( wfMsg( 'blockedtext', $link, $reason, $ip, $name ) );
|
2003-08-02 20:43:11 +00:00
|
|
|
$wgOut->returnToMain( false );
|
|
|
|
|
}
|
|
|
|
|
|
2004-09-03 16:51:45 +00:00
|
|
|
/**
|
|
|
|
|
* @todo document
|
|
|
|
|
*/
|
|
|
|
|
function userNotLoggedInPage() {
|
2003-08-05 11:04:02 +00:00
|
|
|
global $wgOut, $wgUser, $wgLang;
|
|
|
|
|
|
2004-08-22 17:24:50 +00:00
|
|
|
$wgOut->setPageTitle( wfMsg( 'whitelistedittitle' ) );
|
|
|
|
|
$wgOut->setRobotpolicy( 'noindex,nofollow' );
|
2004-01-17 09:49:43 +00:00
|
|
|
$wgOut->setArticleRelated( false );
|
2003-08-05 11:04:02 +00:00
|
|
|
|
2004-08-22 17:24:50 +00:00
|
|
|
$wgOut->addWikiText( wfMsg( 'whitelistedittext' ) );
|
2003-08-05 11:04:02 +00:00
|
|
|
$wgOut->returnToMain( false );
|
|
|
|
|
}
|
|
|
|
|
|
2004-09-03 16:51:45 +00:00
|
|
|
/**
|
|
|
|
|
* @todo document
|
|
|
|
|
*/
|
2004-08-13 20:52:15 +00:00
|
|
|
function spamPage ( $matches = array() )
|
2004-05-29 07:41:16 +00:00
|
|
|
{
|
2004-06-21 07:41:53 +00:00
|
|
|
global $wgOut;
|
2004-08-22 17:24:50 +00:00
|
|
|
$wgOut->setPageTitle( wfMsg( 'spamprotectiontitle' ) );
|
|
|
|
|
$wgOut->setRobotpolicy( 'noindex,nofollow' );
|
2004-05-29 07:41:16 +00:00
|
|
|
$wgOut->setArticleRelated( false );
|
|
|
|
|
|
2004-08-13 20:52:15 +00:00
|
|
|
$wgOut->addWikiText( wfMsg( 'spamprotectiontext' ) );
|
|
|
|
|
if ( isset ( $matches[0] ) ) {
|
|
|
|
|
$wgOut->addWikiText( wfMsg( 'spamprotectionmatch', "<nowiki>{$matches[0]}</nowiki>" ) );
|
|
|
|
|
}
|
2004-05-29 07:41:16 +00:00
|
|
|
$wgOut->returnToMain( false );
|
|
|
|
|
}
|
|
|
|
|
|
2004-09-03 16:51:45 +00:00
|
|
|
/**
|
|
|
|
|
* Forks processes to scan the originating IP for an open proxy server
|
|
|
|
|
* MemCached can be used to skip IPs that have already been scanned
|
|
|
|
|
*/
|
|
|
|
|
function proxyCheck() {
|
2004-03-10 14:24:40 +00:00
|
|
|
global $wgBlockOpenProxies, $wgProxyPorts, $wgProxyScriptPath;
|
|
|
|
|
global $wgIP, $wgUseMemCached, $wgMemc, $wgDBname, $wgProxyMemcExpiry;
|
|
|
|
|
|
|
|
|
|
if ( !$wgBlockOpenProxies ) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Get MemCached key
|
|
|
|
|
$skip = false;
|
2004-03-13 02:20:35 +00:00
|
|
|
if ( $wgUseMemCached ) {
|
2004-08-22 17:24:50 +00:00
|
|
|
$mcKey = $wgDBname.':proxy:ip:'.$wgIP;
|
2004-03-10 14:24:40 +00:00
|
|
|
$mcValue = $wgMemc->get( $mcKey );
|
|
|
|
|
if ( $mcValue ) {
|
|
|
|
|
$skip = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
2003-08-05 11:04:02 +00:00
|
|
|
|
2004-03-10 14:24:40 +00:00
|
|
|
# Fork the processes
|
|
|
|
|
if ( !$skip ) {
|
2004-08-22 17:24:50 +00:00
|
|
|
$title = Title::makeTitle( NS_SPECIAL, 'Blockme' );
|
2004-04-06 01:25:26 +00:00
|
|
|
$iphash = md5( $wgIP . $wgProxyKey );
|
2004-08-22 17:24:50 +00:00
|
|
|
$url = $title->getFullURL( 'ip='.$iphash );
|
2004-04-06 01:25:26 +00:00
|
|
|
|
2004-03-10 14:24:40 +00:00
|
|
|
foreach ( $wgProxyPorts as $port ) {
|
2004-08-22 17:24:50 +00:00
|
|
|
$params = implode( ' ', array(
|
2004-04-06 01:25:26 +00:00
|
|
|
escapeshellarg( $wgProxyScriptPath ),
|
|
|
|
|
escapeshellarg( $wgIP ),
|
|
|
|
|
escapeshellarg( $port ),
|
|
|
|
|
escapeshellarg( $url )
|
|
|
|
|
));
|
2004-03-10 14:24:40 +00:00
|
|
|
exec( "php $params &>/dev/null &" );
|
|
|
|
|
}
|
|
|
|
|
# Set MemCached key
|
|
|
|
|
if ( $wgUseMemCached ) {
|
|
|
|
|
$wgMemc->set( $mcKey, 1, $wgProxyMemcExpiry );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2004-03-14 15:05:52 +00:00
|
|
|
|
2004-09-03 16:51:45 +00:00
|
|
|
/**
|
|
|
|
|
* @access private
|
|
|
|
|
* @todo document
|
|
|
|
|
*/
|
|
|
|
|
function mergeChangesInto( &$text ){
|
2004-07-10 03:09:26 +00:00
|
|
|
$fname = 'EditPage::mergeChangesInto';
|
2004-03-14 15:05:52 +00:00
|
|
|
$oldDate = $this->edittime;
|
2004-07-18 08:48:43 +00:00
|
|
|
$dbw =& wfGetDB( DB_MASTER );
|
2004-07-30 20:43:59 +00:00
|
|
|
$obj = $dbw->getArray( 'cur', array( 'cur_text' ), array( 'cur_id' => $this->mTitle->getArticleID() ),
|
2004-07-10 03:09:26 +00:00
|
|
|
$fname, 'FOR UPDATE' );
|
2004-03-14 15:05:52 +00:00
|
|
|
|
|
|
|
|
$yourtext = $obj->cur_text;
|
|
|
|
|
$ns = $this->mTitle->getNamespace();
|
2004-07-10 03:09:26 +00:00
|
|
|
$title = $this->mTitle->getDBkey();
|
|
|
|
|
$obj = $dbw->getArray( 'old',
|
|
|
|
|
array( 'old_text','old_flags'),
|
2004-08-20 11:01:36 +00:00
|
|
|
array( 'old_namespace' => $ns, 'old_title' => $title,
|
|
|
|
|
'old_timestamp' => $dbw->timestamp($oldDate)),
|
2004-07-10 03:09:26 +00:00
|
|
|
$fname );
|
2004-05-29 16:20:08 +00:00
|
|
|
$oldText = Article::getRevisionText( $obj );
|
|
|
|
|
|
|
|
|
|
if(wfMerge($oldText, $text, $yourtext, $result)){
|
2004-03-14 22:28:52 +00:00
|
|
|
$text = $result;
|
2004-03-14 15:05:52 +00:00
|
|
|
return true;
|
|
|
|
|
} else {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
2003-08-02 20:43:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
?>
|