Code cleanup: normalize case for intval(), strval(), floatval() calls.
[lhc/web/wiklou.git] / config / index.php
index b24ace8..8952fce 100644 (file)
@@ -142,7 +142,7 @@ if( file_exists( "../LocalSettings.php" ) ) {
 
 if( file_exists( "./LocalSettings.php" ) ) {
        writeSuccessMessage();
-       
+
        dieout( '' );
 }
 
@@ -271,9 +271,9 @@ if( empty( $memlimit ) || $memlimit == -1 ) {
        print "<li>PHP is configured with no <tt>memory_limit</tt>.</li>\n";
 } else {
        print "<li>PHP's <tt>memory_limit</tt> is " . htmlspecialchars( $memlimit ) . ". <strong>If this is too low, installation may fail!</strong> ";
-       $n = IntVal( $memlimit );
+       $n = intval( $memlimit );
        if( preg_match( '/^([0-9]+)[Mm]$/', trim( $memlimit ), $m ) ) {
-               $n = IntVal( $m[1] * (1024*1024) );
+               $n = intval( $m[1] * (1024*1024) );
        }
        if( $n < 20*1024*1024 ) {
                print "Attempting to raise limit to 20M... ";
@@ -308,6 +308,24 @@ if (!$conf->turck && !$conf->eaccel) {
          "can't use object caching functions</li>\n";
 }
 
+$conf->diff3 = false;
+$diff3locations = array("/usr/bin", "/opt/csw/bin", "/usr/gnu/bin", "/usr/sfw/bin") + explode(":", getenv("PATH"));
+$diff3names = array("gdiff3", "diff3");
+
+$diff3versioninfo = array('$1 --version 2>&1', 'diff3 (GNU diffutils)');
+foreach ($diff3locations as $loc) {
+       $exe = locate_executable($loc, $diff3names, $diff3versioninfo);
+       if ($exe !== false) {
+               $conf->diff3 = $exe;
+               break;
+       }
+}
+
+if ($conf->diff3)
+       print "<li>Found GNU diff3: <tt>$conf->diff3</tt>.</li>";
+else
+       print "<li>GNU diff3 not found.</li>";
+
 $conf->ImageMagick = false;
 $imcheck = array( "/usr/bin", "/usr/local/bin", "/sw/bin", "/opt/local/bin" );
 foreach( $imcheck as $dir ) {
@@ -349,6 +367,7 @@ print "<li>Script URI path: <tt>" . htmlspecialchars( $conf->ScriptPath ) . "</t
                ? 'root@localhost'
                : $_SERVER["SERVER_ADMIN"];
        $conf->EmergencyContact = importPost( "EmergencyContact", $defaultEmail );
+       $conf->DBtype = importPost( "DBtype", "mysql" );
        $conf->DBserver = importPost( "DBserver", "localhost" );
        $conf->DBname = importPost( "DBname", "wikidb" );
        $conf->DBuser = importPost( "DBuser", "wikiuser" );
@@ -435,6 +454,14 @@ if( $conf->posted && ( 0 == count( $errs ) ) ) {
                $wgCommandLineMode = false;
                chdir( ".." );
                eval($local);
+               if (!in_array($conf->DBtype, array("mysql", "oracle"))) {
+                       $errs["DBtype"] = "Unknown database type.";
+                       continue;
+               }
+               print "<li>Database type: {$conf->DBtype}</li>\n";
+               $dbclass = 'Database'.ucfirst($conf->DBtype);
+               require_once("$dbclass.php");
+               $wgDBtype = $conf->DBtype;
                $wgDBadminuser = "root";
                $wgDBadminpassword = $conf->RootPW;
                $wgDBprefix = $conf->DBprefix;
@@ -448,63 +475,75 @@ if( $conf->posted && ( 0 == count( $errs ) ) ) {
                $wgTitle = Title::newFromText( "Installation script" );
                $mysqlOldClient = version_compare( mysql_get_client_info(), "4.1.0", "lt" );
                if( $mysqlOldClient ) {
-                       print "<li><b>PHP is linked with old MySQL client libraries. If you are 
+                       print "<li><b>PHP is linked with old MySQL client libraries. If you are
                                using a MySQL 4.1 server and have problems connecting to the database,
                                see <a href='http://dev.mysql.com/doc/mysql/en/old-client.html'
                                >http://dev.mysql.com/doc/mysql/en/old-client.html</a> for help.</b></li>\n";
                }
-               print "<li>Trying to connect to MySQL on $wgDBserver as root...\n";
-               $wgDatabase = Database::newFromParams( $wgDBserver, "root", $conf->RootPW, "", 1 );
-
-               if( $wgDatabase->isOpen() ) {
-                       $myver = mysql_get_server_info( $wgDatabase->mConn );
-                       $wgDatabase->ignoreErrors(true);
-                       $conf->Root = true;
-                       print "<ul><li>Connected as root (automatic)</li></ul></li>\n";
-               } else {
-                       print "<ul><li>MySQL error " . ($err = mysql_errno() ) .
-                               ": " . htmlspecialchars( mysql_error() ) . "</li></ul></li>";
-                       $ok = false;
-                       switch( $err ) {
-                       case 1045:
-                       case 2000:
-                               if( $conf->Root ) {
-                                       $errs["RootPW"] = "Check password";
-                               } else {
-                                       print "<li>Trying regular user...\n";
-                                       /* Try the regular user... */
-                                       $wgDBadminuser = $wgDBuser;
-                                       $wgDBadminpassword = $wgDBpassword;
-                                       /* Wait one second for connection rate limiting, present on some systems */
-                                       sleep(1);
-                                       $wgDatabase = Database::newFromParams( $wgDBserver, $wgDBuser, $wgDBpassword, "", 1 );
-                                       if( !$wgDatabase->isOpen() ) {
-                                               print "<ul><li>MySQL error " . ($err = mysql_errno() ) .
-                                                       ": " . htmlspecialchars( mysql_error() ) . "</li></ul></li>";
-                                               $errs["DBuser"] = "Check name/pass";
-                                               $errs["DBpassword"] = "or enter root";
-                                               $errs["DBpassword2"] = "password below";
-                                               $errs["RootPW"] = "Got root?";
+               $dbc = new $dbclass;
+               if ($conf->DBtype == 'mysql') {
+                       print "<li>Trying to connect to database server on $wgDBserver as root...\n";
+                       $wgDatabase = $dbc->newFromParams( $wgDBserver, "root", $conf->RootPW, "", 1 );
+
+                       if( $wgDatabase->isOpen() ) {
+                               $myver = get_db_version();
+                               $wgDatabase->ignoreErrors(true);
+                               $conf->Root = true;
+                               print "<ul><li>Connected as root (automatic)</li></ul></li>\n";
+                       } else {
+                               print "<ul><li>MySQL error " . ($err = mysql_errno() ) .
+                                       ": " . htmlspecialchars( mysql_error() ) . "</li></ul></li>";
+                               $ok = false;
+                               switch( $err ) {
+                               case 1045:
+                               case 2000:
+                                       if( $conf->Root ) {
+                                               $errs["RootPW"] = "Check password";
                                        } else {
-                                               $myver = mysql_get_server_info( $wgDatabase->mConn );
-                                               $wgDatabase->ignoreErrors(true);
-                                               $conf->Root = false;
-                                               $conf->RootPW = "";
-                                               print " ok.</li>\n";
-                                               # And keep going...
-                                               $ok = true;
+                                               print "<li>Trying regular user...\n";
+                                               /* Try the regular user... */
+                                               $wgDBadminuser = $wgDBuser;
+                                               $wgDBadminpassword = $wgDBpassword;
+                                               /* Wait one second for connection rate limiting, present on some systems */
+                                               sleep(1);
+                                               $wgDatabase = Database::newFromParams( $wgDBserver, $wgDBuser, $wgDBpassword, "", 1 );
+                                               if( !$wgDatabase->isOpen() ) {
+                                                       print "<ul><li>MySQL error " . ($err = mysql_errno() ) .
+                                                               ": " . htmlspecialchars( mysql_error() ) . "</li></ul></li>";
+                                                       $errs["DBuser"] = "Check name/pass";
+                                                       $errs["DBpassword"] = "or enter root";
+                                                       $errs["DBpassword2"] = "password below";
+                                                       $errs["RootPW"] = "Got root?";
+                                               } else {
+                                                       $myver = mysql_get_server_info( $wgDatabase->mConn );
+                                                       $wgDatabase->ignoreErrors(true);
+                                                       $conf->Root = false;
+                                                       $conf->RootPW = "";
+                                                       print " ok.</li>\n";
+                                                       # And keep going...
+                                                       $ok = true;
+                                               }
+                                               break;
                                        }
+                               case 2002:
+                               case 2003:
+                                       $errs["DBserver"] = "Connection failed";
+                                       break;
+                               default:
+                                       $errs["DBserver"] = "Couldn't connect to database";
                                        break;
                                }
-                       case 2002:
-                       case 2003:
-                               $errs["DBserver"] = "Connection failed";
-                               break;
-                       default:
-                               $errs["DBserver"] = "Couldn't connect to database";
-                               break;
+                               if( !$ok ) continue;
+                       }
+               } else /* not mysql */ {
+                       print "<li>Connecting to SQL server...";
+                       $wgDatabase = $dbc->newFromParams($wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, 1);
+                       if (!$wgDatabase->isOpen()) {
+                               print " error: " . $wgDatabase->lastError() . "</li>\n";
+                       } else {
+                               $wgDatabase->ignoreErrors(true);
+                               $myver = get_db_version();
                        }
-                       if( !$ok ) continue;
                }
 
                if ( !$wgDatabase->isOpen() ) {
@@ -527,32 +566,34 @@ if( $conf->posted && ( 0 == count( $errs ) ) ) {
                }
                print "</li>\n";
 
-               @$sel = mysql_select_db( $wgDBname, $wgDatabase->mConn );
-               if( $sel ) {
-                       print "<li>Database <tt>" . htmlspecialchars( $wgDBname ) . "</tt> exists</li>\n";
-               } else {
-                       $err = mysql_errno();
-                       if ( $err != 1049 ) {
-                               print "<ul><li>Error selecting database $wgDBname: $err " . htmlspecialchars( mysql_error() ) .
-                                       "</li></ul>";
-                               continue;
-                       }
-                       $res = $wgDatabase->query( "CREATE DATABASE `$wgDBname`" );
-                       if( !$res ) {
-                               print "<li>Couldn't create database <tt>" .
-                                       htmlspecialchars( $wgDBname ) .
-                                       "</tt>; try with root access or check your username/pass.</li>\n";
-                               $errs["RootPW"] = "&lt;- Enter";
-                               continue;
+               if ($conf->DBtype == 'mysql') {
+                       @$sel = mysql_select_db( $wgDBname, $wgDatabase->mConn );
+                       if( $sel ) {
+                               print "<li>Database <tt>" . htmlspecialchars( $wgDBname ) . "</tt> exists</li>\n";
+                       } else {
+                               $err = mysql_errno();
+                               if ( $err != 1049 ) {
+                                       print "<ul><li>Error selecting database $wgDBname: $err " .
+                                               htmlspecialchars( mysql_error() ) . "</li></ul>";
+                                       continue;
+                               }
+                               $res = $wgDatabase->query( "CREATE DATABASE `$wgDBname`" );
+                               if( !$res ) {
+                                       print "<li>Couldn't create database <tt>" .
+                                               htmlspecialchars( $wgDBname ) .
+                                               "</tt>; try with root access or check your username/pass.</li>\n";
+                                       $errs["RootPW"] = "&lt;- Enter";
+                                       continue;
+                               }
+                               print "<li>Created database <tt>" . htmlspecialchars( $wgDBname ) . "</tt></li>\n";
                        }
-                       print "<li>Created database <tt>" . htmlspecialchars( $wgDBname ) . "</tt></li>\n";
+                       $wgDatabase->selectDB( $wgDBname );
                }
 
-               $wgDatabase->selectDB( $wgDBname );
 
                if( $wgDatabase->tableExists( "cur" ) || $wgDatabase->tableExists( "revision" ) ) {
                        print "<li>There are already MediaWiki tables in this database. Checking if updates are needed...</li>\n";
-                       
+
                        # Create user if required
                        if ( $conf->Root ) {
                                $conn = Database::newFromParams( $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, 1 );
@@ -579,8 +620,14 @@ if( $conf->posted && ( 0 == count( $errs ) ) ) {
                } else {
                        # FIXME: Check for errors
                        print "<li>Creating tables...";
-                       dbsource( "../maintenance/tables.sql", $wgDatabase );
-                       dbsource( "../maintenance/interwiki.sql", $wgDatabase );
+                       if ($conf->DBtype == 'mysql') {
+                               dbsource( "../maintenance/tables.sql", $wgDatabase );
+                               dbsource( "../maintenance/interwiki.sql", $wgDatabase );
+                       } else {
+                               dbsource( "../maintenance/oracle/tables.sql", $wgDatabase );
+                               dbsource( "../maintenance/oracle/interwiki.sql", $wgDatabase );
+                       }
+
                        print " done.</li>\n";
 
                        print "<li>Initializing data...";
@@ -604,7 +651,7 @@ if( $conf->posted && ( 0 == count( $errs ) ) ) {
 
                                        $u->addGroup( "sysop" );
                                        $u->addGroup( "bureaucrat" );
-                                       
+
                                        print "<li>Created sysop account <tt>" .
                                                htmlspecialchars( $conf->SysopName ) . "</tt>.</li>\n";
                                } else {
@@ -626,7 +673,7 @@ if( $conf->posted && ( 0 == count( $errs ) ) ) {
                                ) );
                        $revid = $revision->insertOn( $wgDatabase );
                        $article->updateRevisionOn( $wgDatabase, $revision );
-                       
+
                        print "<li><pre>";
                        initialiseMessages();
                        print "</pre></li>\n";
@@ -656,7 +703,7 @@ if( $conf->posted && ( 0 == count( $errs ) ) ) {
                } else {
                        fclose( $f );
                        die("<p class='error'>An error occured while writing the config/LocalSettings.php file. Check user rights and disk space then try again.</p>\n");
-                        
+
                }
 
        } while( false );
@@ -781,14 +828,14 @@ if( count( $errs ) ) {
 
                <ul class="plain">
                <li><?php aField( $conf, "Shm", "no caching", "radio", "none" ); ?></li>
-               <?php 
+               <?php
                        if ( $conf->turck ) {
                                echo "<li>";
                                aField( $conf, "Shm", "Turck MMCache", "radio", "turck" );
                                echo "</li>";
                        }
                ?>
-               <?php 
+               <?php
                        if ( $conf->eaccel ) {
                                echo "<li>";
                                aField( $conf, "Shm", "eAccelerator", "radio", "eaccel" );
@@ -801,12 +848,12 @@ if( count( $errs ) ) {
        </dd>
        <dt>
                Using a shared memory system such as Turck MMCache, eAccelerator, or Memcached will speed
-               up MediaWiki significantly. Memcached is the best solution but needs to be 
-               installed. Specify the server addresses and ports in a comma-separted list. Only 
+               up MediaWiki significantly. Memcached is the best solution but needs to be
+               installed. Specify the server addresses and ports in a comma-separted list. Only
                use Turck shared memory if the wiki will be running on a single Apache server.
        </dl>
 
-<h2>E-mail, e-mail notification and authentification setup</h2>
+<h2>E-mail, e-mail notification and authentication setup</h2>
 
 <dl class="setup">
        <dd>
@@ -867,10 +914,8 @@ if( count( $errs ) ) {
                </ul>
        </dd>
        <dt>
-               <p>
-               E-mail address authentication uses a scheme to authenticate e-mail addresses of the users. The user who initially enters or who changes his/her stored e-mail address
-               gets a one-time temporary password mailed to that address. The user can use the original password as long as wanted, however, the stored e-mail address
-               is only authenticated at the moment when the user logs in with the one-time temporary password.<p>
+               <p>E-mail address authentication uses a scheme to authenticate e-mail addresses of the users. The user who initially enters or changes his/her stored e-mail address
+               gets a link with a token mailed to that address. The stored e-mail address is authenticated at the moment the user comes back to the wiki via the link.</p>
 
                <p>The e-mail address stays authenticated as long as the user does not change it; the time of authentication is indicated
                on the user preference page.</p>
@@ -884,17 +929,31 @@ if( count( $errs ) ) {
 <h2>Database config</h2>
 
 <dl class="setup">
+       <dd>
+               <label class='column'>Database type</label>
+               <div>Select the database server software:</div>
+               <ul class='plain'>
+               <?php
+                       aField( $conf, "DBtype", "MySQL", "radio", "mysql");
+                       aField( $conf, "DBtype", "Oracle", "radio", "oracle" );
+               ?>
+               </ul>
+       </dd>
+
        <dd><?php
-               aField( $conf, "DBserver", "MySQL server" );
+               aField( $conf, "DBserver", "SQL server host" );
        ?></dd>
        <dt>
                If your database server isn't on your web server, enter the name
-               or IP address here.
+               or IP address here.  MySQL only.
        </dt>
 
        <dd><?php
                aField( $conf, "DBname", "Database name" );
        ?></dd>
+       <dt>
+               If using Oracle, set this to your connection identifier.
+       </dt>
        <dd><?php
                aField( $conf, "DBuser", "DB username" );
        ?></dd>
@@ -917,7 +976,7 @@ if( count( $errs ) ) {
                <p>If you need to share one database between multiple wikis, or
                MediaWiki and another web application, you may choose to
                add a prefix to all the table names to avoid conflicts.</p>
-               
+
                <p>Avoid exotic characters; something like <tt>mw_</tt> is good.</p>
        </dt>
 
@@ -959,8 +1018,8 @@ function writeSuccessMessage() {
        <li>Delete config/LocalSettings.php</li>
        <li>Start using <a href='../index.php'>your wiki</a>!
 </ol>
-<p>If you are in a shared hosting environment, do <strong>not</strong> just move LocalSettings.php 
-remotely. LocalSettings.php is currently owned by the user your webserver is running under, 
+<p>If you are in a shared hosting environment, do <strong>not</strong> just move LocalSettings.php
+remotely. LocalSettings.php is currently owned by the user your webserver is running under,
 which means that anyone on the same server can read your database password! Downloading
 it and uploading it again will hopefully change the ownership to a user ID specific to you.</p>
 EOT;
@@ -994,7 +1053,7 @@ function writeLocalSettings( $conf ) {
        $ugly = ($conf->prettyURLs ? "# " : "");
        $rights = ($conf->RightsUrl) ? "" : "# ";
        $hashedUploads = $conf->safeMode ? '' : '# ';
-       
+
        switch ( $conf->Shm ) {
                case 'memcached':
                        $cacheType = 'CACHE_MEMCACHED';
@@ -1113,6 +1172,7 @@ if ( \$wgCommandLineMode ) {
 \$wgDBuser           = \"{$slconf['DBuser']}\";
 \$wgDBpassword       = \"{$slconf['DBpassword']}\";
 \$wgDBprefix         = \"{$slconf['DBprefix']}\";
+\$wgDBtype           = \"{$slconf['DBtype']}\";
 
 # If you're on MySQL 3.x, this next line must be FALSE:
 \$wgDBmysql4 = {$conf->DBmysql4};
@@ -1128,9 +1188,9 @@ if ( \$wgCommandLineMode ) {
 {$magic}\$wgUseImageMagick = true;
 {$magic}\$wgImageMagickConvertCommand = \"{$convert}\";
 
-## If you want to use image uploads under safe mode, 
-## create the directories images/archive, images/thumb and 
-## images/temp, and make them all writable. Then uncomment 
+## If you want to use image uploads under safe mode,
+## create the directories images/archive, images/thumb and
+## images/temp, and make them all writable. Then uncomment
 ## this, if it's not already uncommented:
 {$hashedUploads}\$wgHashedUploadDirectory = false;
 
@@ -1160,6 +1220,8 @@ if ( \$wgCommandLineMode ) {
 \$wgRightsText = \"{$slconf['RightsText']}\";
 \$wgRightsIcon = \"{$slconf['RightsIcon']}\";
 # \$wgRightsCode = \"{$slconf['RightsCode']}\"; # Not yet used
+
+\$wgDiff3 = \"{$slconf['diff3']}\";
 ";
        // Keep things in Unix line endings internally;
        // the system will write out as local text type.
@@ -1253,6 +1315,35 @@ function getLanguageList() {
        return $codes;
 }
 
+#Check for location of an executable
+# @param string $loc single location to check
+# @param array $names filenames to check for.
+# @param mixed $versioninfo array of details to use when checking version, use false for no version checking
+function locate_executable($loc, $names, $versioninfo = false) {
+       if (!is_array($names))
+               $names = array($names);
+
+       foreach ($names as $name) {
+               if (file_exists("$loc/$name")) {
+                       if (!$versioninfo)
+                               return "$loc/$name";
+
+                       $file = str_replace('$1', "$loc/$name", $versioninfo[0]);
+                       if (strstr(`$file`, $versioninfo[1]) !== false)
+                               return "$loc/$name";
+               }
+       }
+       return false;
+}
+
+function get_db_version() {
+       global $wgDatabase, $conf;
+       if ($conf->DBtype == 'mysql')
+               return mysql_get_server_info( $wgDatabase->mConn );
+       else if ($conf->DBtype == 'oracle')
+               return oci_server_version($wgDatabase->mConn);
+}
+
 # Test a memcached server
 function testMemcachedServer( $server ) {
        $hostport = explode(":", $server);