# http://www.mediawiki.org/
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# http://www.gnu.org/copyleft/gpl.html
header( "Content-type: text/html; charset=utf-8" );
?>
MediaWiki installation
MediaWiki is
Copyright (C) 2001-2004 by Magnus Manske, Brion Vibber, Lee Daniel Crocker,
Tim Starling, Erik Möller, and others.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This progarm is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
or read it online
MediaWiki installation
Wiki is configured.
Already configured... return to the wiki .
(You should probably remove this directory for added security.)
" );
}
if( file_exists( "./LocalSettings.php" ) || file_exists( "./AdminSettings.php" ) ) {
dieout( "You're configured!
Please move LocalSettings.php to the parent directory, then
try out your wiki .
(You should remove this config directory for added security once you're done.)
" );
}
if( !is_writable( "." ) ) {
dieout( "Can't write config file, aborting
In order to configure the wiki you have to make the config subdirectory
writable by the web server. Once configuration is done you'll move the created
LocalSettings.php to the parent directory, and for added safety you can
then remove the config subdirectory entirely.
To make the directory writable on a Unix/Linux system:
cd /path/to/wiki
chmod a+w config
" );
}
include( "../install-utils.inc" );
class ConfigData {
function getEncoded( $data ) {
# Hackish
global $wgInputEncoding;
if( strcasecmp( $wgInputEncoding, "utf-8" ) == 0 ) {
return $data;
} else {
return utf8_decode( $data ); /* to latin1 wikis */
}
}
function getSitename() { return $this->getEncoded( $this->Sitename ); }
function getSysopName() { return $this->getEncoded( $this->SysopName ); }
function getSysopPass() { return $this->getEncoded( $this->SysopPass ); }
}
?>
Checking environment...
PHP " . phpversion() . " ok\n";
/*
$conf->zlib = function_exists( "gzencode" );
$z = $conf->zlib ? "Have" : "No";
print "$z zlib support \n";
$conf->gd = function_exists( "imagejpeg" );
if( $conf->gd ) {
print "Found GD graphics library built-in \n";
} else {
print "No built-in GD library \n";
}
if( file_exists( "/usr/bin/convert" ) ) {
$conf->ImageMagick = "/usr/bin/convert";
print "Found ImageMagick: /usr/bin/convert \n";
} elseif( file_exists( "/usr/local/bin/convert" ) ) {
$conf->ImageMagick = "/usr/local/bin/convert";
print "Found ImageMagick: /usr/local/bin/convert \n";
} else {
$conf->ImageMagick = false;
print "No ImageMagick. \n";
}
*/
# $conf->IP = "/Users/brion/Sites/inplace";
chdir( ".." );
$conf->IP = getcwd();
chdir( "config" );
print "Installation directory: " . htmlspecialchars( $conf->IP ) . " \n";
# $conf->ScriptPath = "/~brion/inplace";
$conf->ScriptPath = preg_replace( '{^(.*)/config.*$}', '$1', $_SERVER["REQUEST_URI"] );
print "Script URI path: " . htmlspecialchars( $conf->ScriptPath ) . " \n";
$conf->posted = ($_SERVER["REQUEST_METHOD"] == "POST");
$conf->Sitename = ucfirst( importPost( "Sitename", "" ) );
$conf->EmergencyContact = importPost( "EmergencyContact", $_SERVER["SERVER_ADMIN"] );
$conf->DBserver = importPost( "DBserver", "localhost" );
$conf->DBname = importPost( "DBname", "wikidb" );
$conf->DBuser = importPost( "DBuser", "wikiuser" );
$conf->DBpassword = importPost( "DBpassword" );
$conf->DBpassword2 = importPost( "DBpassword2" );
$conf->RootPW = importPost( "RootPW" );
$conf->LanguageCode = importPost( "LanguageCode", "en-utf8" );
$conf->SysopName = importPost( "SysopName", "WikiSysop" );
$conf->SysopPass = importPost( "SysopPass" );
$conf->SysopPass2 = importPost( "SysopPass2" );
/* Check for validity */
$errs = array();
if( $conf->Sitename == "" || $conf->Sitename == "MediaWiki" || $conf->Sitename == "Mediawiki" ) {
$errs["Sitename"] = "Must not be blank or \"MediaWiki\".";
}
if( $conf->DBpassword == "" ) {
$errs["DBpassword"] = "Must not be blank";
}
if( $conf->DBpassword != $conf->DBpassword2 ) {
$errs["DBpassword2"] = "Passwords don't match!";
}
if( $conf->SysopPass == "" ) {
$errs["SysopPass"] = "Must not be blank";
}
if( $conf->SysopPass != $conf->SysopPass2 ) {
$errs["SysopPass2"] = "Passwords don't match!";
}
if( $conf->posted && ( 0 == count( $errs ) ) ) {
do { /* So we can 'continue' to end prematurely */
$conf->Root = ($conf->RootPW != "");
/* Load up the settings and get installin' */
$local = writeLocalSettings( $conf );
$wgCommandLineMode = false;
eval($local);
$wgDBadminuser = $wgDBuser;
$wgDBadminpassword = $wgDBpassword;
$wgCommandLineMode = true;
$wgUseDatabaseMessages = false; /* FIXME: For database failure */
include_once( "Setup.php" );
include_once( "../maintenance/InitialiseMessages.inc" );
$wgTitle = Title::newFromText( "Installation script" );
if( $conf->Root ) {
$wgDatabase = Database::newFromParams( $wgDBserver, "root", $conf->RootPW, "", 1 );
} else {
$wgDatabase = Database::newFromParams( $wgDBserver, $wgDBuser, $wgDBpassword, "", 1 );
}
$wgDatabase->mIgnoreErrors = true;
if ( !$wgDatabase->isOpen() ) {
$errs["DBserver"] = "Couldn't connect to database";
continue;
}
@$myver = mysql_get_server_info( $wgDatabase->mConn );
if( !$myver ) {
print "MySQL error " . ($err = mysql_errno() ) .
": " . htmlspecialchars( mysql_error() );
switch( $err ) {
case 1045:
if( $conf->Root ) {
$errs["RootPW"] = "Check password";
} else {
$errs["DBuser"] = "Check name/pass";
$errs["DBpassword"] = "or enter root";
$errs["DBpassword2"] = "password below";
$errs["RootPW"] = "Got root?";
}
break;
case 2002:
case 2003:
$errs["DBserver"] = "Connection failed";
break;
default:
$errs["DBserver"] = "Couldn't connect to database";
}
continue;
}
print " Connected to database... $myver";
if( version_compare( $myver, "4.0.0" ) >= 0 ) {
print "; enabling MySQL 4 enhancements";
$conf->DBmysql4 = true;
$local = writeLocalSettings( $conf );
}
print " \n";
@$sel = mysql_select_db( $wgDBname, $wgDatabase->mConn );
if( $sel ) {
print "Database " . htmlspecialchars( $wgDBname ) . " exists \n";
} else {
$res = $wgDatabase->query( "CREATE DATABASE `$wgDBname`" );
if( !$res ) {
print "Couldn't create database " .
htmlspecialchars( $wgDBname ) .
" ; try with root access or check your username/pass. \n";
$errs["RootPW"] = "<- Enter";
continue;
}
print "Created database " . htmlspecialchars( $wgDBname ) . " \n";
}
$wgDatabase->selectDB( $wgDBname );
if( $wgDatabase->tableExists( "cur" ) ) {
print "There are already MediaWiki tables in this database. Skipping rest of database setup... \n";
} else {
# FIXME: Check for errors
print "Creating tables...";
dbsource( "../maintenance/tables.sql", $wgDatabase );
dbsource( "../maintenance/interwiki.sql", $wgDatabase );
dbsource( "../maintenance/indexes.sql", $wgDatabase );
print " done. \n";
print "Initializing data...";
$wgDatabase->query( "INSERT INTO site_stats (ss_row_id,ss_total_views," .
"ss_total_edits,ss_good_articles) VALUES (1,0,0,0)" );
if( $conf->SysopName ) {
$u = User::newFromName( $conf->getSysopName() );
if ( 0 == $u->idForName() ) {
$u->addToDatabase();
$u->setPassword( $conf->getSysopPass() );
$u->addRight( "sysop" );
$u->addRight( "developer" ); /* ?? */
$u->saveSettings();
print " Created sysop account " .
htmlspecialchars( $conf->SysopName ) . " . \n";
} else {
print "Could not create user - already exists! \n";
}
} else {
print "Skipped sysop account creation, no name given. \n";
}
print "Initialising log pages...";
$logs = array(
"uploadlogpage" => "uploadlogpagetext",
"dellogpage" => "dellogpagetext",
"protectlogpage" => "protectlogtext",
"blocklogpage" => "bloglogtext"
);
$metaNamespace = Namespace::getWikipedia();
$now = wfTimestampNow();
$won = wfInvertTimestamp( $now );
foreach( $logs as $page => $text ) {
$logTitle = wfStrencode( $wgLang->ucfirst( str_replace( " ", "_", wfMsgNoDB( $page ) ) ) );
$logText = wfStrencode( wfMsgNoDB( $text ) );
$wgDatabase->query( "INSERT INTO cur (cur_namespace,cur_title,cur_text," .
"cur_restrictions,cur_timestamp,inverse_timestamp,cur_touched) " .
"VALUES ($metaNamespace,'$logTitle','$logText','sysop','$now','$won','$now')" );
}
print " \n";
$titleobj = Title::newFromText( wfMsgNoDB( "mainpage" ) );
$title = $titleobj->getDBkey();
$sql = "INSERT INTO cur (cur_namespace,cur_title,cur_text,cur_timestamp,inverse_timestamp,cur_touched) " .
"VALUES (0,'$title','" .
wfStrencode( wfMsg( "mainpagetext" ) ) . "','$now','$won','$now')";
$wgDatabase->query( $sql, $fname );
print "";
initialiseMessages();
print " \n";
if( $conf->Root ) {
# Grant user permissions
dbsource( "../maintenance/users.sql", $wgDatabase );
}
}
/* Write out the config file now that all is well */
print "Creating LocalSettings.php...
\n\n";
$localSettings = "<" . "?php\n$local\n?" . ">";
$f = fopen( "LocalSettings.php", "xt" );
if( $f == false ) {
dieout( "Couldn't write out LocalSettings.php. Check that the directory permissions are correct and that there isn't already a file of that name here...\n" .
"Here's the file that would have been written, try to paste it into place manually:
\n" .
" \n" . htmlspecialchars( $localSettings ) . " \n" );
}
fwrite( $f, $localSettings );
fclose( $f );
print "Success! Move the LocalSettings.php file into the parent directory, then follow
this link to your wiki.
\n";
} while( false );
}
?>
posted ) {
echo "Something's not quite right yet; make sure everything below is filled out correctly.
\n";
}
?>
DBadminuser}\";
\$wgDBadminpassword = \"{$conf->DBadminpassword}\";
";
}
function writeLocalSettings( $conf ) {
$conf->DBmysql4 = $conf->DBmysql4 ? 'true' : 'false';
$conf->UseImageResize = $conf->UseImageResize ? 'true' : 'false';
$conf->DBsqluser = $conf->DBuser;
$conf->DBsqlpassword = $conf->DBpassword;
$conf->PasswordSender = $conf->EmergencyContact;
if( $conf->LanguageCode == "en-utf8" ) {
$conf->LanguageCode = "en";
$conf->Encoding = "UTF-8";
}
return "
# This file was automatically generated. Don't touch unless you
# know what you're doing; see LocalSettings.sample for an edit-
# friendly file.
\$IP = \"{$conf->IP}\";
ini_set( \"include_path\", \"\$IP/includes:\$IP/languages:\" . ini_get(\"include_path\") );
include_once( \"DefaultSettings.php\" );
if( \$wgCommandLineMode ) {
die( \"Can't use command-line utils with in-place install yet, sorry.\" );
}
\$wgSitename = \"{$conf->Sitename}\";
\$wgScriptPath = \"{$conf->ScriptPath}\";
\$wgScript = \"\$wgScriptPath/index.php\";
\$wgRedirectScript = \"\$wgScriptPath/redirect.php\";
\$wgArticlePath = \"\$wgScript?title=\$1\";
# \$wgArticlePath = \"\$wgScript/\$1\"; # Prettier if you're setup for it
\$wgStyleSheetPath = \"\$wgScriptPath/stylesheets\";
\$wgStyleSheetDirectory = \"\$IP/stylesheets\";
\$wgUploadPath = \"\$wgScriptPath/images\";
\$wgUploadDirectory = \"\$IP/images\";
\$wgLogo = \"\$wgUploadPath/wiki.png\";
\$wgEmergencyContact = \"{$conf->EmergencyContact}\";
\$wgPasswordSender = \"{$conf->PasswordSender}\";
\$wgDBserver = \"{$conf->DBserver}\";
\$wgDBname = \"{$conf->DBname}\";
\$wgDBuser = \"{$conf->DBuser}\";
\$wgDBpassword = \"{$conf->DBpassword}\";
\$wgDBsqluser = \"{$conf->DBsqluser}\";
\$wgDBsqlpassword = \"{$conf->DBsqlpassword}\";
\$wgDBmysql4 = \$wgEnablePersistentLC = {$conf->DBmysql4};
\$wgUseImageResize = {$conf->UseImageResize};
## If you have the appropriate support software installed
## you can enable inline LaTeX equations:
# \$wgUseTeX = true;
# \$wgMathPath = \"{$wgUploadPath}/math\";
# \$wgMathDirectory = \"{$wgUploadDirectory}/math\";
# \$wgTmpDirectory = \"{$wgUploadDirectory}/tmp\";
\$wgLocalInterwiki = \$wgSitename;
\$wgLanguageCode = \"{$conf->LanguageCode}\";
" . ($conf->Encoding ? "\$wgInputEncoding = \$wgOutputEncoding = \"{$conf->Encoding}\";" : "" ) . "
";
}
function dieout( $text ) {
die( $text . "\n\n\n" );
}
function importPost( $name, $default = "" ) {
if( isset( $_POST[$name] ) ) {
return $_POST[$name];
} else {
return $default;
}
}
function aField( &$conf, $field, $text, $type = "" ) {
if( $type != "" ) $type = "type=\"$type\"";
echo "\t\t$text \n";
echo "\t\t $field );
echo "\" />\n";
global $errs;
if(isset($errs[$field])) echo "" . $errs[$field] . " \n";
}
function getLanguageList() {
global $wgLanguageNames;
if( !isset( $wgLanguageNames ) ) {
$wgLanguageCode = "xxx";
function wfLocalUrl( $x ) { return $x; }
function wfLocalUrlE( $x ) { return $x; }
include( "../languages/Language.php" );
}
$codes = array();
$latin1 = array( "da", "de", "en", "es", "fr", "nl", "sv" );
$d = opendir( "../languages" );
while( false !== ($f = readdir( $d ) ) ) {
if( preg_match( '/Language([A-Z][a-z]+)\.php$/', $f, $m ) ) {
$code = strtolower( $m[1] );
$codes[$code] = "$code - " . $wgLanguageNames[$code];
if( in_array( $code, $latin1 ) ) {
$codes[$code] .= " - Latin-1";
}
}
}
$codes["en-utf8"] = "en - English - Unicode";
closedir( $d );
ksort( $codes );
return $codes;
}
?>