| 1 | <?php |
|---|
| 2 | |
|---|
| 3 | /** |
|---|
| 4 | * This is the main web entry point for MediaWiki. |
|---|
| 5 | * |
|---|
| 6 | * If you are reading this in your web browser, your server is probably |
|---|
| 7 | * not configured correctly to run PHP applications! |
|---|
| 8 | * |
|---|
| 9 | * See the README, INSTALL, and UPGRADE files for basic setup instructions |
|---|
| 10 | * and pointers to the online documentation. |
|---|
| 11 | * |
|---|
| 12 | * http://www.mediawiki.org/ |
|---|
| 13 | * |
|---|
| 14 | * ---------- |
|---|
| 15 | * |
|---|
| 16 | * Copyright (C) 2001-2010 Magnus Manske, Brion Vibber, Lee Daniel Crocker, |
|---|
| 17 | * Tim Starling, Erik Möller, Gabriel Wicke, Ãvar Arnfjörð Bjarmason, |
|---|
| 18 | * Niklas Laxström, Domas Mituzas, Rob Church, Yuri Astrakhan, Aryeh Gregor, |
|---|
| 19 | * Aaron Schulz and others. |
|---|
| 20 | * |
|---|
| 21 | * This program is free software; you can redistribute it and/or modify |
|---|
| 22 | * it under the terms of the GNU General Public License as published by |
|---|
| 23 | * the Free Software Foundation; either version 2 of the License, or |
|---|
| 24 | * (at your option) any later version. |
|---|
| 25 | * |
|---|
| 26 | * This program is distributed in the hope that it will be useful, |
|---|
| 27 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 28 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|---|
| 29 | * GNU General Public License for more details. |
|---|
| 30 | * |
|---|
| 31 | * You should have received a copy of the GNU General Public License along |
|---|
| 32 | * with this program; if not, write to the Free Software Foundation, Inc., |
|---|
| 33 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|---|
| 34 | * http://www.gnu.org/copyleft/gpl.html |
|---|
| 35 | * |
|---|
| 36 | * @file |
|---|
| 37 | */ |
|---|
| 38 | |
|---|
| 39 | |
|---|
| 40 | # Initialise common code |
|---|
| 41 | $preIP = dirname( __FILE__ ); |
|---|
| 42 | require_once( "$preIP/includes/WebStart.php" ); |
|---|
| 43 | |
|---|
| 44 | # Initialize MediaWiki base class |
|---|
| 45 | require_once( "$preIP/includes/Wiki.php" ); |
|---|
| 46 | $mediaWiki = new MediaWiki(); |
|---|
| 47 | |
|---|
| 48 | wfProfileIn( 'main-misc-setup' ); |
|---|
| 49 | OutputPage::setEncodings(); # Not really used yet |
|---|
| 50 | |
|---|
| 51 | $maxLag = $wgRequest->getVal( 'maxlag' ); |
|---|
| 52 | if( !is_null( $maxLag ) && !$mediaWiki->checkMaxLag( $maxLag ) ) { |
|---|
| 53 | exit; |
|---|
| 54 | } |
|---|
| 55 | |
|---|
| 56 | # Query string fields |
|---|
| 57 | $action = $wgRequest->getVal( 'action', 'view' ); |
|---|
| 58 | $title = $wgRequest->getVal( 'title' ); |
|---|
| 59 | |
|---|
| 60 | # Set title from request parameters |
|---|
| 61 | $wgTitle = $mediaWiki->checkInitialQueries( $title, $action ); |
|---|
| 62 | if( $wgTitle === null ) { |
|---|
| 63 | unset( $wgTitle ); |
|---|
| 64 | } |
|---|
| 65 | |
|---|
| 66 | wfProfileOut( 'main-misc-setup' ); |
|---|
| 67 | |
|---|
| 68 | # |
|---|
| 69 | # Send Ajax requests to the Ajax dispatcher. |
|---|
| 70 | # |
|---|
| 71 | if( $wgUseAjax && $action == 'ajax' ) { |
|---|
| 72 | require_once( $IP . '/includes/AjaxDispatcher.php' ); |
|---|
| 73 | $dispatcher = new AjaxDispatcher(); |
|---|
| 74 | $dispatcher->performAction(); |
|---|
| 75 | $mediaWiki->restInPeace(); |
|---|
| 76 | exit; |
|---|
| 77 | } |
|---|
| 78 | |
|---|
| 79 | if( $wgUseFileCache && isset( $wgTitle ) ) { |
|---|
| 80 | wfProfileIn( 'main-try-filecache' ); |
|---|
| 81 | // Raw pages should handle cache control on their own, |
|---|
| 82 | // even when using file cache. This reduces hits from clients. |
|---|
| 83 | if( $action != 'raw' && HTMLFileCache::useFileCache() ) { |
|---|
| 84 | /* Try low-level file cache hit */ |
|---|
| 85 | $cache = new HTMLFileCache( $wgTitle, $action ); |
|---|
| 86 | if( $cache->isFileCacheGood( /* Assume up to date */ ) ) { |
|---|
| 87 | /* Check incoming headers to see if client has this cached */ |
|---|
| 88 | if( !$wgOut->checkLastModified( $cache->fileCacheTime() ) ) { |
|---|
| 89 | $cache->loadFromFileCache(); |
|---|
| 90 | } |
|---|
| 91 | # Do any stats increment/watchlist stuff |
|---|
| 92 | $wgArticle = MediaWiki::articleFromTitle( $wgTitle ); |
|---|
| 93 | $wgArticle->viewUpdates(); |
|---|
| 94 | # Tell $wgOut that output is taken care of |
|---|
| 95 | wfProfileOut( 'main-try-filecache' ); |
|---|
| 96 | $mediaWiki->restInPeace(); |
|---|
| 97 | exit; |
|---|
| 98 | } |
|---|
| 99 | } |
|---|
| 100 | wfProfileOut( 'main-try-filecache' ); |
|---|
| 101 | } |
|---|
| 102 | |
|---|
| 103 | # Setting global variables in mediaWiki |
|---|
| 104 | $mediaWiki->setVal( 'action', $action ); |
|---|
| 105 | $mediaWiki->setVal( 'CommandLineMode', $wgCommandLineMode ); |
|---|
| 106 | $mediaWiki->setVal( 'DisabledActions', $wgDisabledActions ); |
|---|
| 107 | $mediaWiki->setVal( 'DisableHardRedirects', $wgDisableHardRedirects ); |
|---|
| 108 | $mediaWiki->setVal( 'DisableInternalSearch', $wgDisableInternalSearch ); |
|---|
| 109 | $mediaWiki->setVal( 'EnableCreativeCommonsRdf', $wgEnableCreativeCommonsRdf ); |
|---|
| 110 | $mediaWiki->setVal( 'EnableDublinCoreRdf', $wgEnableDublinCoreRdf ); |
|---|
| 111 | $mediaWiki->setVal( 'JobRunRate', $wgJobRunRate ); |
|---|
| 112 | $mediaWiki->setVal( 'Server', $wgServer ); |
|---|
| 113 | $mediaWiki->setVal( 'SquidMaxage', $wgSquidMaxage ); |
|---|
| 114 | $mediaWiki->setVal( 'UseExternalEditor', $wgUseExternalEditor ); |
|---|
| 115 | $mediaWiki->setVal( 'UsePathInfo', $wgUsePathInfo ); |
|---|
| 116 | |
|---|
| 117 | $mediaWiki->performRequestForTitle( $wgTitle, $wgArticle, $wgOut, $wgUser, $wgRequest ); |
|---|
| 118 | $mediaWiki->finalCleanup( $wgDeferredUpdateList, $wgOut ); |
|---|
| 119 | |
|---|
| 120 | # Not sure when $wgPostCommitUpdateList gets set, so I keep this separate from finalCleanup |
|---|
| 121 | $mediaWiki->doUpdates( $wgPostCommitUpdateList ); |
|---|
| 122 | |
|---|
| 123 | $mediaWiki->restInPeace(); |
|---|
| 124 | |
|---|