Made a SiteConfiguration object generally available. Added functions for performing...
authorTim Starling <tstarling@users.mediawiki.org>
Sun, 26 Jun 2005 06:34:13 +0000 (06:34 +0000)
committerTim Starling <tstarling@users.mediawiki.org>
Sun, 26 Jun 2005 06:34:13 +0000 (06:34 +0000)
includes/DefaultSettings.php
includes/HttpFunctions.php [new file with mode: 0644]
includes/SiteConfiguration.php

index 7418a9d..f0d0cd2 100644 (file)
@@ -17,6 +17,13 @@ if( !defined( 'MEDIAWIKI' ) ) {
        die( "This file is part of MediaWiki and is not a valid entry point\n" );
 }
 
+/** 
+ * Create a site configuration object
+ * Not used for much in a default install
+ */ 
+require_once( 'includes/SiteConfiguration.php' );
+$wgConf = new SiteConfiguration;
+
 /** MediaWiki version number */
 $wgVersion                     = '1.5beta1';
 
@@ -1540,5 +1547,9 @@ $wgTrustedMediaFormats= array(
  */
 $wgAllowSpecialInclusion = true;
 
+/**
+ * Timeout for HTTP requests done via CURL
+ */
+$wgHTTPTimeout = 3;
 
 ?>
diff --git a/includes/HttpFunctions.php b/includes/HttpFunctions.php
new file mode 100644 (file)
index 0000000..2daa3ac
--- /dev/null
@@ -0,0 +1,63 @@
+<?php
+
+/**
+ * Get the contents of a file by HTTP
+ * 
+ * if $timeout is 'default', $wgHTTPTimeout is used
+ */
+function wfGetHTTP( $url, $timeout = 'default' ) {
+       global $wgServer, $wgHTTPTimeout;
+       
+
+       # Use curl if available
+       if ( function_exists( 'curl_init' ) ) {
+               $c = curl_init( $url );
+               if ( wfIsLocalURL( $url ) ) {
+                       curl_setopt( $c, CURLOPT_PROXY, 'localhost:80' );
+               }
+               if ( $timeout == 'default' ) {
+                       $timeout = $wgHTTPTimeout;
+               }
+               curl_setopt( $c, CURLOPT_TIMEOUT, $timeout );
+               ob_start();
+               curl_exec();
+               $text = ob_get_contents();
+               ob_end_clean();
+       } else {
+               # Otherwise use file_get_contents, or its compatibility function from GlobalFunctions.php
+               # This may take 3 minutes to time out, and doesn't have local fetch capabilities
+               $url_fopen = ini_set( 'allow_url_fopen', 1 );
+               $text = file_get_contents( $url );
+               ini_set( 'allow_url_fopen', $url_fopen );
+       }
+       return $text;
+}
+
+/**
+ * Check if the URL can be served by localhost
+ */
+function wfIsLocalURL( $url ) {
+       global $wgConf;
+       // Extract host part
+       if ( preg_match( '!^http://([\w.-]+)[/:].*$!', $url, $matches ) ) {
+               $host = $matches[1];
+               // Split up dotwise
+               $domainParts = explode( '.', $host );
+               // Check if this domain or any superdomain is listed in $wgConf as a local virtual host
+               $domainParts = array_reverse( $domainParts );
+               for ( $i = 0; $i < count( $domainParts ); $i++ ) {
+                       $domainPart = $domainParts[$i];
+                       if ( $i == 0 ) {
+                               $domain = $domainPart;
+                       } else {
+                               $domain = $domainPart . '.' . $domain;
+                       }
+                       if ( $wgConf->isLocalVHost( $domain ) ) {
+                               return true;
+                       }
+               }
+       }
+       return false;
+}
+
+?>
index 1abe48d..c7c78a6 100644 (file)
@@ -1,8 +1,6 @@
 <?php
 /**
- *This file is used to configure the live Wikimedia wikis. The file that
- * includes it contains passwords and other sensitive data, and there's
- * currently no public equivalent.
+ * This is a class used to hold configuration settings, particularly for multi-wiki sites. 
  *
  * @package MediaWiki
  */
@@ -21,8 +19,11 @@ if (!defined('SITE_CONFIGURATION')) {
 define('SITE_CONFIGURATION', 1);
 
 class SiteConfiguration {
-       var $suffixes, $wikis, $settings;
-       var $localDatabases;
+       var $suffixes = array();
+       var $wikis = array();
+       var $settings = array();
+       var $localDatabases = array();
+       var $localVHosts = array();
        
        function get( $setting, $wiki, $suffix, $params = array() ) {
                if ( array_key_exists( $wiki, $this->settings[$setting] ) ) {
@@ -92,6 +93,10 @@ class SiteConfiguration {
                }
                return array( $site, $lang );
        }
+
+       function isLocalVHost( $vhost ) {
+               return in_array( $vhost, $this->localVHosts );
+       }
 }
 }