var $GET; /* Stores the $_GET variables at time of creation, can be changed */
var $params = array();
-
- /**
- * Constructor
- */
- function MediaWiki () {
+
+ /** Constructor. It just save the $_GET variable */
+ function __construct() {
$this->GET = $_GET;
}
-
+
/**
* Stores key/value pairs to circumvent global variables
* Note that keys are case-insensitive!
$key = strtolower( $key );
$this->params[$key] =& $value;
}
-
+
/**
* Retrieves key/value pairs to circumvent global variables
* Note that keys are case-insensitive!
}
return $default;
}
-
+
/**
* Initialization of ... everything
@return Article either the object to become $wgArticle, or NULL
wfProfileOut( 'MediaWiki::initialize' );
return $article;
}
-
+
/**
* Checks some initial queries
* Note that $title here is *not* a Title object, but a string!
if ($request->getVal( 'printable' ) == 'yes') {
$output->setPrintable();
}
-
+
$ret = NULL ;
-
-
+
+
if ( '' == $title && 'delete' != $action ) {
- $ret = Title::newFromText( wfMsgForContent( 'mainpage' ) );
+ $ret = Title::newMainPage();
} elseif ( $curid = $request->getInt( 'curid' ) ) {
# URLs like this are generated by RC, because rc_title isn't always accurate
$ret = Title::newFromID( $curid );
*/
if( count($lang->getVariants()) > 1 && !is_null($ret) && $ret->getArticleID() == 0 )
$lang->findVariantLink( $title, $ret );
-
+
}
return $ret ;
}
-
+
/**
* Checks for search query and anon-cannot-read case
*/
function preliminaryChecks ( &$title, &$output, $request ) {
-
+
# Debug statement for user levels
// print_r($wgUser);
-
+
$search = $request->getText( 'search' );
if( !is_null( $search ) && $search !== '' ) {
// Compatibility with old search URLs which didn't use Special:Search
// Do this above the read whitelist check for security...
- $title = Title::makeTitle( NS_SPECIAL, 'Search' );
+ $title = SpecialPage::getTitleFor( 'Search' );
}
$this->setVal( 'Search', $search );
$output->output();
exit;
}
-
+
}
-
+
/**
* Initialize the object to be known as $wgArticle for special cases
*/
function initializeSpecialCases ( &$title, &$output, $request ) {
-
+ global $wgRequest;
wfProfileIn( 'MediaWiki::initializeSpecialCases' );
-
+
$search = $this->getVal('Search');
$action = $this->getVal('Action');
if( !$this->getVal('DisableInternalSearch') && !is_null( $search ) && $search !== '' ) {
require_once( 'includes/SpecialSearch.php' );
- $title = Title::makeTitle( NS_SPECIAL, 'Search' );
+ $title = SpecialPage::getTitleFor( 'Search' );
wfSpecialSearch();
} else if( !$title or $title->getDBkey() == '' ) {
- $title = Title::makeTitle( NS_SPECIAL, 'Badtitle' );
+ $title = SpecialPage::getTitleFor( 'Badtitle' );
# Die now before we mess up $wgArticle and the skin stops working
throw new ErrorPageError( 'badtitle', 'badtitletext' );
} else if ( $title->getInterwiki() != '' ) {
if ( !preg_match( '/^' . preg_quote( $this->getVal('Server'), '/' ) . '/', $url ) && $title->isLocal() ) {
$output->redirect( $url );
} else {
- $title = Title::makeTitle( NS_SPECIAL, 'Badtitle' );
+ $title = SpecialPage::getTitleFor( 'Badtitle' );
throw new ErrorPageError( 'badtitle', 'badtitletext' );
}
} else if ( ( $action == 'view' ) &&
(!isset( $this->GET['title'] ) || $title->getPrefixedDBKey() != $this->GET['title'] ) &&
!count( array_diff( array_keys( $this->GET ), array( 'action', 'title' ) ) ) )
{
- /* Redirect to canonical url, make it a 301 to allow caching */
- $output->setSquidMaxage( 1200 );
- $output->redirect( $title->getFullURL(), '301');
+ $targetUrl = $title->getFullURL();
+ // Redirect to canonical url, make it a 301 to allow caching
+ global $wgUsePathInfo;
+ if( $targetUrl == $wgRequest->getFullRequestURL() ) {
+ $message = "Redirect loop detected!\n\n" .
+ "This means the wiki got confused about what page was " .
+ "requested; this sometimes happens when moving a wiki " .
+ "to a new server or changing the server configuration.\n\n";
+
+ if( $wgUsePathInfo ) {
+ $message .= "The wiki is trying to interpret the page " .
+ "title from the URL path portion (PATH_INFO), which " .
+ "sometimes fails depending on the web server. Try " .
+ "setting \"\$wgUsePathInfo = false;\" in your " .
+ "LocalSettings.php, or check that \$wgArticlePath " .
+ "is correct.";
+ } else {
+ $message .= "Your web server was detected as possibly not " .
+ "supporting URL path components (PATH_INFO) correctly; " .
+ "check your LocalSettings.php for a customized " .
+ "\$wgArticlePath setting and/or toggle \$wgUsePathInfo " .
+ "to true.";
+ }
+ wfHttpError( 500, "Internal error", $message );
+ return false;
+ } else {
+ $output->setSquidMaxage( 1200 );
+ $output->redirect( $targetUrl, '301');
+ }
} else if ( NS_SPECIAL == $title->getNamespace() ) {
/* actions that need to be made when we have a special pages */
SpecialPage::executePath( $title );
// FIXME: where should this go?
$title = Title::makeTitle( NS_IMAGE, $title->getDBkey() );
}
-
+
switch( $title->getNamespace() ) {
case NS_IMAGE:
return new ImagePage( $title );
return new Article( $title );
}
}
-
+
/**
* Initialize the object to be known as $wgArticle for "standard" actions
* Create an Article object for the page, following redirects if needed.
function initializeArticle( $title, $request ) {
global $wgTitle;
wfProfileIn( 'MediaWiki::initializeArticle' );
-
+
$action = $this->getVal('Action');
$article = $this->articleFromTitle( $title );
-
+
// Namespace might change when using redirects
if( $action == 'view' && !$request->getVal( 'oldid' ) &&
$request->getVal( 'redirect' ) != 'no' ) {
-
- $dbr =& wfGetDB(DB_SLAVE);
+
+ $dbr = wfGetDB(DB_SLAVE);
$article->loadPageData($article->pageDataFromTitle($dbr, $title));
-
+
/* Follow redirects only for... redirects */
if ($article->mIsRedirect) {
$target = $article->followRedirect();
*/
function doUpdates ( &$updates ) {
wfProfileIn( 'MediaWiki::doUpdates' );
- $dbw =& wfGetDB( DB_MASTER );
+ $dbw = wfGetDB( DB_MASTER );
foreach( $updates as $up ) {
$up->doUpdate();
*/
function doJobs() {
global $wgJobRunRate;
-
+
if ( $wgJobRunRate <= 0 || wfReadOnly() ) {
return;
}
wfDebugLog( 'jobqueue', $output );
}
}
-
+
/**
* Ends this task peacefully
*/
showCreditsPage( $article );
break;
case 'submit':
- if( !$this->getVal( 'CommandLineMode' ) && !$request->checkSessionCookie() ) {
+ if( session_id() == '' ) {
/* Send a cookie so anons get talk message notifications */
- User::SetupSession();
+ wfSetupSession();
}
/* Continue... */
case 'edit':
- $internal = $request->getVal( 'internaledit' );
- $external = $request->getVal( 'externaledit' );
- $section = $request->getVal( 'section' );
- $oldid = $request->getVal( 'oldid' );
- if( !$this->getVal( 'UseExternalEditor' ) || $action=='submit' || $internal ||
- $section || $oldid || ( !$user->getOption( 'externaleditor' ) && !$external ) ) {
- $editor = new EditPage( $article );
- $editor->submit();
- } elseif( $this->getVal( 'UseExternalEditor' ) && ( $external || $user->getOption( 'externaleditor' ) ) ) {
- $mode = $request->getVal( 'mode' );
- $extedit = new ExternalEdit( $article, $mode );
- $extedit->edit();
+ if( wfRunHooks( 'CustomEditor', array( $article, $user ) ) ) {
+ $internal = $request->getVal( 'internaledit' );
+ $external = $request->getVal( 'externaledit' );
+ $section = $request->getVal( 'section' );
+ $oldid = $request->getVal( 'oldid' );
+ if( !$this->getVal( 'UseExternalEditor' ) || $action=='submit' || $internal ||
+ $section || $oldid || ( !$user->getOption( 'externaleditor' ) && !$external ) ) {
+ $editor = new EditPage( $article );
+ $editor->submit();
+ } elseif( $this->getVal( 'UseExternalEditor' ) && ( $external || $user->getOption( 'externaleditor' ) ) ) {
+ $mode = $request->getVal( 'mode' );
+ $extedit = new ExternalEdit( $article, $mode );
+ $extedit->edit();
+ }
}
break;
case 'history':
- if( $_SERVER['REQUEST_URI'] == $title->getInternalURL( 'action=history' ) ) {
+ global $wgRequest;
+ if( $wgRequest->getFullRequestURL() == $title->getInternalURL( 'action=history' ) ) {
$output->setSquidMaxage( $this->getVal( 'SquidMaxage' ) );
}
$history = new PageHistory( $article );
}
wfProfileOut( 'MediaWiki::performAction' );
-
}
}; /* End of class MediaWiki */