http://www.mediawiki.org/wiki/Special:Code/MediaWiki/89582

Revision: 89582
Author:   pdhanda
Date:     2011-06-06 17:02:56 +0000 (Mon, 06 Jun 2011)
Log Message:
-----------
First version of wrapper that can handle multiple versions. Working on 
localhost and prototype.wikimedia.org

Modified Paths:
--------------
    trunk/tools/mwmultiversion/live-1.5/MWVersion.php

Modified: trunk/tools/mwmultiversion/live-1.5/MWVersion.php
===================================================================
--- trunk/tools/mwmultiversion/live-1.5/MWVersion.php   2011-06-06 16:45:40 UTC 
(rev 89581)
+++ trunk/tools/mwmultiversion/live-1.5/MWVersion.php   2011-06-06 17:02:56 UTC 
(rev 89582)
@@ -1,64 +1,93 @@
 <?php
 
-function host2db( $host ) {
-       if( $host == 'wikimediafoundation.org' || $host == 
'www.wikimediafoundation.org' )
-               return 'foundationwiki';
-       if ( $host == 'wikisource.org' || $host == 'www.wikisource.org' )
-               return 'sourceswiki';
-       if ( $host == 'mediawiki.org' || $host == 'www.mediawiki.org' )
-               return 'mediawikiwiki';
-       if( preg_match( '/^(.*)\.(.*)\.org$/', $host, $matches ) ) {
-               list( $whole, $lang, $site ) = $matches;
-               $lang = str_replace( '-', '_', $lang );
-               switch( $site ) {
-               case 'wikipedia':
-               case 'wikimedia':
-                       return $lang . 'wiki';
-               default:
-                       return $lang . $site;
-               }
+function host2db() {
+       if ( $_SERVER['SERVER_NAME'] == 'localhost') {
+                       $dbname = getenv( 'MW_DBNAME' );
+                       if ( !isset( $dbname ) ) {
+                               die( 'Unable to determine MW_DBNAME on 
localhost' );
+                       }
+                       return $dbname;
        }
-       return null;
-}
+       $secure = getenv( 'MW_SECURE_HOST' );
+       if ( (@$_SERVER['SCRIPT_NAME']) == '/w/thumb.php' && 
(@$_SERVER['SERVER_NAME']) == 'upload.wikimedia.org' ) {
+               $pathBits = explode( '/', $_SERVER['PATH_INFO'] );
+               $site = $pathBits[1];
+               $lang = $pathBits[2];
+       } elseif (php_sapi_name() == 'cgi-fcgi') {
+               if (!preg_match('/^([^.]+).([^.]+).*$/', 
$_SERVER['SERVER_NAME'], $m))
+               die("invalid hostname");
 
-function wfIsConverted( $host ) {
-       return true;
+               $lang = $m[1];
+               $site = $m[2];
 
-       /*
-       $db = host2db( $host );
+               if (in_array($lang, array("commons", "grants", "sources", 
"wikimania", "wikimania2006", "foundation", "meta")))
+               $site = "wikipedia";
+       } elseif( $secure ) {
+               if (!preg_match('/^([^.]+).([^.]+).*$/', $secure, $m))
+               die("invalid hostname");
 
-       #$all = array_map( 'trim', file( '/usr/local/apache/common/all.dblist' 
) );
-       #$started = array_map( 'trim', file( 
'/home/wikipedia/logs/conversion15start' ) );
-       
-       $converted = array_map( 'trim', file( 
'/usr/local/apache/common/1.17.dblist' ) );
-       #$converted = array( 'test2wiki' );
-       return in_array( $db, $converted );
-        */
+               $lang = $m[1];
+               $site = $m[2];
+
+               if (in_array($lang, array("commons", "grants", "sources", 
"wikimania", "wikimania2006", "foundation", "meta")))
+               $site = "wikipedia";
+       } else {
+               if ( !isset( $site ) ) {
+                       $site = "wikipedia";
+                       if ( !isset( $lang ) ) {
+                               $server = $_SERVER['SERVER_NAME'];
+                               $docRoot = $_SERVER['DOCUMENT_ROOT'];
+                               
+                               if ( preg_match( 
'/^(?:\/usr\/local\/apache\/|\/home\/wikipedia\/)(?:htdocs|common\/docroot)\/([a-z]+)\.org/',
 $docRoot, $matches ) ) {
+                                       $site = $matches[1];
+                                       if ( preg_match( '/^(.*)\.' . 
preg_quote( $site ) . '\.org$/', $server, $matches ) ) {
+                                               $lang = $matches[1];
+                                               // For some special subdomains, 
like pa.us
+                                               $lang = str_replace( '.', '-', 
$lang );
+                                       } else if ( preg_match( 
'/^(.*)\.prototype\.wikimedia\.org$/', $server, $matches ) ) {
+                                               $lang = $matches[1];
+                                       } else {
+                                               die( "Invalid host name 
($server), can't determine language" );
+                                       }
+                               } elseif ( preg_match( 
"/^\/usr\/local\/apache\/(?:htdocs|common\/docroot)\/([a-z0-9\-_]*)$/", 
$docRoot, $matches ) ) {
+                                       $site = "wikipedia";
+                                       $lang = $matches[1];
+                               } else {
+                                       die( "Invalid host name (docroot=" . 
$_SERVER['DOCUMENT_ROOT'] . "), can't determine language" );
+                               }
+                       }
+               }
+       }
+       if ( $site == "wikipedia" ) {
+               $dbSuffix = "wiki";
+       } else {
+               $dbSuffix = $site;
+       }
+       $dbname = str_replace( "-", "_", $lang . $dbSuffix );
+       return $dbname;
 }
 
 function getMediaWiki( $file ) {
-       $secure = getenv( 'MW_SECURE_HOST' );
-       $host = $secure ? $secure : $_SERVER['HTTP_HOST'];
-       $new = wfIsConverted( $host );
-       $version = $new ? 'php-1.17' : 'wmf-deployment';
-       if ( $new ) {
-               define( 'ONE_SEVENTEEN', 1 );
+       $dbname = host2db( );
+
+       $db = dba_open( '/usr/local/apache/common/wikiversions.db', 'r', 'cdb' 
);
+       if ( $db ) {
+               $version = dba_fetch( $dbname, $db );
+       } else {
+               //don't error for now
+               //trigger_error( "Unable to open 
/usr/local/apache/common/wikiversions.db. Assuming php-1.17", E_USER_ERROR );
+               $version = 'php-1.17';
        }
 
        if ( $host == 'test.wikipedia.org' && !$secure &&
-                       !preg_match( '!thumb\.php!', $_SERVER['REQUEST_URI'] ) 
) {
+       !preg_match( '!thumb\.php!', $_SERVER['REQUEST_URI'] ) ) {
                define( 'TESTWIKI', 1 );
                // As horrible hack for NFS-less iamge scalers, use regular 
docroot for thumbs?
-#              $IP = '/home/wikipedia/common/php-1.5';
+               #               $IP = '/home/wikipedia/common/php-1.5';
                $IP = "/home/wikipedia/common/$version";
        } else {
                $IP = "/usr/local/apache/common/$version";
        }
-       #} elseif( $host == 'www.mediawiki.org' || $host == 
'meta.wikimedia.org' ) {
-       #       $IP = '/usr/local/apache/common/wmf-deployment';
-       #} else {
-       #       $IP = '/usr/local/apache/common/php-1.5';
-       #}
 
        chdir( $IP );
        putenv( "MW_INSTALL_PATH=$IP" );
@@ -66,3 +95,4 @@
 }
 
 ?>
+       


_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to