-wfProfileIn( 'main-action' );
-
-if( !$wgDisableInternalSearch && !is_null( $search ) && $search !== '' ) {
- require_once( 'includes/SpecialSearch.php' );
- $wgTitle = Title::makeTitle( NS_SPECIAL, 'Search' );
- wfSpecialSearch();
-} else if( !$wgTitle or $wgTitle->getDBkey() == '' ) {
- $wgTitle = Title::newFromText( wfMsgForContent( 'badtitle' ) );
- $wgOut->errorpage( 'badtitle', 'badtitletext' );
-} else if ( $wgTitle->getInterwiki() != '' ) {
- if( $rdfrom = $wgRequest->getVal( 'rdfrom' ) ) {
- $url = $wgTitle->getFullURL( 'rdfrom=' . urlencode( $rdfrom ) );
- } else {
- $url = $wgTitle->getFullURL();
- }
- # Check for a redirect loop
- if ( !preg_match( '/^' . preg_quote( $wgServer, '/' ) . '/', $url ) && $wgTitle->isLocal() ) {
- $wgOut->redirect( $url );
- } else {
- $wgTitle = Title::newFromText( wfMsgForContent( 'badtitle' ) );
- $wgOut->errorpage( 'badtitle', 'badtitletext' );
- }
-} else if ( ( $action == 'view' ) &&
- (!isset( $_GET['title'] ) || $wgTitle->getPrefixedDBKey() != $_GET['title'] ) &&
- !count( array_diff( array_keys( $_GET ), array( 'action', 'title' ) ) ) )
-{
- /* redirect to canonical url, make it a 301 to allow caching */
- $wgOut->setSquidMaxage( 1200 );
- $wgOut->redirect( $wgTitle->getFullURL(), '301');
-} else if ( NS_SPECIAL == $wgTitle->getNamespace() ) {
- # actions that need to be made when we have a special pages
- SpecialPage::executePath( $wgTitle );
-} else {
-
- require_once( "includes/Wiki.php" ) ;
- $mediaWiki = new MediaWiki() ;
-
- $wgArticle =& $mediaWiki->initializeArticle( $wgTitle, $wgRequest, $action );
-
- if( in_array( $action, $wgDisabledActions ) ) {
- $wgOut->errorpage( 'nosuchaction', 'nosuchactiontext' );
- } else {
- $mediaWiki->setVal( "SquidMaxage", $wgSquidMaxage );
- $mediaWiki->setVal( "EnableDublinCoreRdf", $wgEnableDublinCoreRdf );
- $mediaWiki->setVal( "EnableCreativeCommonsRdf", $wgEnableCreativeCommonsRdf );
- $mediaWiki->setVal( "CommandLineMode", $wgCommandLineMode );
- $mediaWiki->setVal( "UseExternalEditor", $wgUseExternalEditor );
- $mediaWiki->performAction( $action, $wgOut, $wgArticle, $wgTitle, $wgUser, $wgRequest );
+if( $wgUseFileCache && isset( $wgTitle ) ) {
+ wfProfileIn( 'main-try-filecache' );
+ // Raw pages should handle cache control on their own,
+ // even when using file cache. This reduces hits from clients.
+ if( $action != 'raw' && HTMLFileCache::useFileCache() ) {
+ /* Try low-level file cache hit */
+ $cache = new HTMLFileCache( $wgTitle, $action );
+ if( $cache->isFileCacheGood( /* Assume up to date */ ) ) {
+ /* Check incoming headers to see if client has this cached */
+ if( !$wgOut->checkLastModified( $cache->fileCacheTime() ) ) {
+ $cache->loadFromFileCache();
+ }
+ # Do any stats increment/watchlist stuff
+ $wgArticle = MediaWiki::articleFromTitle( $wgTitle );
+ $wgArticle->viewUpdates();
+ # Tell $wgOut that output is taken care of
+ wfProfileOut( 'main-try-filecache' );
+ $mediaWiki->restInPeace();
+ exit;
+ }