New automatic installation script! No need to make config.php anymore!

It's rough but it works.  I will be doing lots of work on making it
slicker so don't translate the strings just yet.
This commit is contained in:
moodler 2004-08-12 15:53:32 +00:00
parent f324d4dd86
commit 8b5b10281c
3 changed files with 585 additions and 1 deletions

View File

@ -1,7 +1,12 @@
<?PHP // $Id$
// index.php - the front page.
// Bounds for block widths
if (!file_exists('./config.php')) {
header('Location: install.php');
die;
}
/// Bounds for block widths on this page
define('BLOCK_L_MIN_WIDTH', 160);
define('BLOCK_L_MAX_WIDTH', 210);
define('BLOCK_R_MIN_WIDTH', 160);

523
install.php Normal file
View File

@ -0,0 +1,523 @@
<?php /// $Id$
/// install.php - helps admin user to create a config.php file
/// If config.php exists already then we are not needed.
if (file_exists('./config.php')) {
header('Location: index.php');
} else {
$configfile = './config.php';
}
///==========================================================================//
/// We are doing this in stages
/// 1. Welcome and language settings
/// 2. Database settings
/// 3. Host settings
/// 4. Administration directory name
/// 5. Save or display the settings
/// 6. Redirect to index.php
///==========================================================================//
/// Begin the session as we are holding all information in a session
/// variable until the end.
session_name('MoodleSession');
@session_start();
if (! isset($_SESSION['INSTALL'])) {
$_SESSION['INSTALL'] = array();
}
$INSTALL = &$_SESSION['INSTALL']; // Makes it easier to reference
if ( empty($INSTALL['language']) and empty($_POST['language']) ) { // First time through this script
/// set defaults
$INSTALL['language'] = 'en';
$INSTALL['dbhost'] = 'localhost';
$INSTALL['dbuser'] = '';
$INSTALL['dbpass'] = '';
$INSTALL['dbtype'] = 'mysql';
$INSTALL['dbname'] = 'moodle';
$INSTALL['prefix'] = 'mdl_';
$INSTALL['wwwroot'] = '';
$INSTALL['dirroot'] = dirname(__FILE__);
$INSTALL['dataroot'] = dirname(dirname(__FILE__)) . '/moodledata';
$INSTALL['admindirname'] = 'admin';
$INSTALL['stage'] = 1;
}
//==========================================================================//
/// Fake some settings so that we can use selected functions from moodlelib.php and weblib.php
$SESSION->lang = (!empty($_POST['language'])) ? $_POST['language'] : $INSTALL['language'];
$CFG->dirroot = $INSTALL['dirroot'];
$CFG->dataroot = $INSTALL['dataroot'];
$CFG->directorypermissions = 0777;
require_once('./lib/moodlelib.php');
require_once('./lib/weblib.php');
require_once('./lib/adodb/adodb.inc.php');
/// guess the www root
if ($INSTALL['wwwroot'] == '') {
list($INSTALL['wwwroot'], $xtra) = explode('/install.php', qualified_me());
}
$stagetext = array(1 => get_string('chooselanguage', 'install'),
get_string('directorysettings', 'install'),
get_string('databasesettings', 'install'),
get_string('admindirsetting', 'install'),
get_string('configurationcomplete', 'install')
);
//==========================================================================//
/// Was data submitted?
if (!empty($_POST['stage'])) {
/// Get the stage for which the form was set and the next stage we are going to
if ( $goforward = (! empty( $_POST['next'] )) ) {
$nextstage = $_POST['stage'] + 1;
} else {
$nextstage = $_POST['stage'] - 1;
}
if ($nextstage < 1) $nextstage = 1;
/// Store any posted data
foreach ($_POST as $setting=>$value) {
$INSTALL[$setting] = $value;
}
} else {
$goforward = true;
$nextstage = 1;
}
//==========================================================================//
/// Check the directory settings
if ($INSTALL['stage'] == 2) {
error_reporting(0);
/// check wwwroot
if (($fh = @fopen($INSTALL['wwwroot'].'/install.php', 'r')) === false) {
$errormsg = get_string('wwwrooterror', 'install');
} else {
fclose($fh);
/// check dirroot
if (($fh = @fopen($INSTALL['dirroot'].'/install.php', 'r')) === false ) {
$CFG->dirroot = dirname(__FILE__);
$INSTALL['dirroot'] = dirname(__FILE__);
$errormsg = get_string('dirrooterror', 'install');
} else {
fclose($fh);
$CFG->dirroot = $INSTALL['dirroot'];
/// check dataroot
$CFG->dataroot = $INSTALL['dataroot'];
if (make_upload_directory('sessions', false) === false ) {
$errormsg = get_string('datarooterror', 'install');
}
}
}
if (!empty($errormsg)) $nextstage = 2;
error_reporting(7);
}
//==========================================================================//
/// Check database settings if stage 3 data submitted
/// Try to connect to the database. If that fails then try to create the database
if ($INSTALL['stage'] == 3) {
if (empty($INSTALL['dbname'])) {
$INSTALL['dbname'] = 'moodle';
}
/// different format for postgres7
if ($INSTALL['dbtype'] == 'postgres7') {
$INSTALL['dbhost'] = "user='{$INSTALL['dbuser']}' password='{$INSTALL['dbpass']}' dbname='{$INSTALL['dbname']}'";
if ($INSTALL['prefix'] == '') { /// must have a prefix
$INSTALL['prefix'] = 'mdl_';
}
}
$db = &ADONewConnection($INSTALL['dbtype']);
error_reporting(0); // Hide errors
if (!($dbconnected = $db->Connect($INSTALL['dbhost'],$INSTALL['dbuser'],$INSTALL['dbpass'],$INSTALL['dbname']))) {
/// The following doesn't seem to work but we're working on it
/// If you come up with a solution for creating a database in MySQL
/// feel free to put it in and let us know
if ($dbconnected = $db->Connect($INSTALL['dbhost'],$INSTALL['dbuser'],$INSTALL['dbpass'])) {
switch ($INSTALL['dbtype']) { /// Try to create a database
case 'mysql':
if ($db->Execute("CREATE DATABASE {$INSTALL['dbname']};")) {
$dbconnected = $db->Connect($INSTALL['dbhost'],$INSTALL['dbuser'],$INSTALL['dbpass'],$INSTALL['dbname']);
} else {
$errormsg = get_string('dbcreationerror', 'install');
$nextstage = 3;
}
break;
}
}
}
error_reporting(7);
if (($dbconnected === false) and (empty($errormsg)) ) {
$errormsg = get_string('dbconnectionerror', 'install');
$nextstage = 3;
}
}
//==========================================================================//
/// If the next stage is admin directory settings OR we have just come from there then
/// check the admin directory.
/// If we can open a file then we know that the admin name is correct.
if ($nextstage == 4 or $INSTALL['stage'] == 4) {
if (($fh = @fopen($INSTALL['wwwroot'].'/'.$INSTALL['admindirname'].'/site.html', 'r')) !== false) {
$nextstage = ($goforward) ? 5 : 3;
fclose($fh);
} else {
if ($nextstage != 4) {
$errormsg = get_string('admindirerror', 'install');
$nextstage = 4;
}
}
}
//==========================================================================//
/// Display or print the data
/// Put the data into a string
/// Try to open config file for writing.
if ($nextstage == 5) {
$str = '<?php /// Moodle Configuration File '."\n";
$str .= "\n";
$str .= 'unset($CFG);'."\n";
$str .= "\n";
$str .= '$CFG->dbtype = \''.$INSTALL['dbtype']."';\n";
$str .= '$CFG->dbhost = \''.$INSTALL['dbhost']."';\n";
if ($INSTALL['dbtype'] == 'mysql') {
$str .= '$CFG->dbname = \''.$INSTALL['dbname']."';\n";
$str .= '$CFG->dbuser = \''.$INSTALL['dbuser']."';\n";
$str .= '$CFG->dbpass = \''.$INSTALL['dbpass']."';\n";
}
$str .= '$CFG->dbpersist = false;'."\n";
$str .= '$CFG->prefix = \''.$INSTALL['prefix']."';\n";
$str .= "\n";
$str .= '$CFG->wwwroot = \''.$INSTALL['wwwroot']."';\n";
$str .= '$CFG->dirroot = \''.$INSTALL['dirroot']."';\n";
$str .= '$CFG->dataroot = \''.$INSTALL['dataroot']."';\n";
$str .= "\n";
$str .= '$CFG->directorypermissions = 0777;'."\n";
$str .= "\n";
$str .= 'require_once("$CFG->dirroot/lib/setup.php");'."\n";
$str .= '// MAKE SURE WHEN YOU EDIT THIS FILE THAT THERE ARE NO SPACES, BLANK LINES,'."\n";
$str .= '// RETURNS, OR ANYTHING ELSE AFTER THE TWO CHARACTERS ON THE NEXT LINE.'."\n";
$str .= '?>';
if (( $configsuccess = ($fh = @fopen($configfile, 'w')) ) !== false) {
fwrite($fh, $str);
fclose($fh);
}
}
//==========================================================================//
?>
<html dir="<?php echo (get_string('this_direction') == 'rtl') ? 'rtl' : 'ltr' ?>">
<head>
<link rel="shortcut icon" href="http://moodle.dougiamas.net/theme/standard/favicon.ico" />
<title>Moodle Install</title>
<meta http-equiv="content-type" content="text/html; charset=<?php print_string('thischarset') ?>" />
<?php css_styles() ?>
</head>
<body>
<h1 align="center">MOODLE INSTALL</h1>
<table class="main" align="center" cellpadding="3" cellspacing="0">
<tr>
<td class="td_mainheading"><p class="p_mainheading"><?php echo $stagetext[$nextstage] ?></p></td>
</tr>
<tr>
<td class="td_main">
<?php
if (!empty($errormsg)) echo "<p class=\"errormsg\" align=\"center\">$errormsg</p>\n";
if ($nextstage == 5) {
if ($configsuccess) {
echo "<p>".get_string('configfilewritten', 'install')."</p>\n";
} else {
echo "<p>".get_string('configfilenotwritten', 'install')."</p>";
echo "<hr />\n";
echo "<div style=\"text-align: left\">\n";
print_object(htmlentities($str));
echo "</div>\n";
echo "<hr />\n";
}
echo "<p>(<a href=\"index.php?lang={$INSTALL['language']}\">Continue</a>)</p>\n";
} else {
$formaction = (isset($_GET['configfile'])) ? "install.php?configfile=".$_GET['configfile'] : "install.php";
form_table($nextstage, $formaction);
}
?>
</td>
</tr>
</table>
</body>
</html>
<?php
//==========================================================================//
function print_object($object) {
echo "<pre>\n";
print_r($object);
echo "</pre>\n";
}
//==========================================================================//
function form_table($nextstage = 1, $formaction = "install.php") {
global $INSTALL;
/// standard lines for all forms
?>
<form name="installform" method="post" action="<?php echo $formaction ?>">
<input type="hidden" name="stage" value="<?php echo $nextstage ?>" />
<table class="install_table" cellspacing="3" cellpadding="3" align="center">
<?php
/// what we do depends on the stage we're at
switch ($nextstage) {
case 1: /// Language settings
?>
<tr>
<td class="td_left"><p><?php print_string('language') ?></p></td>
<td class="td_right">
<?php choose_from_menu (get_list_of_languages(), 'language', $INSTALL['language'], '') ?>
</td>
</tr>
<?php
break;
case 2: /// Directory settings
?>
<tr>
<td class="td_left"><p><?php print_string('wwwroot', 'install') ?></p></td>
<td class="td_right">
<input type="text" size="40"name="wwwroot" value="<?php echo $INSTALL['wwwroot'] ?>" />
</td>
</tr>
<tr>
<td class="td_left"><p><?php print_string('dirroot', 'install') ?></p></td>
<td class="td_right">
<input type="text" size="40" name="dirroot" value="<?php echo $INSTALL['dirroot'] ?>" />
</td>
</tr>
<tr>
<td class="td_left"><p><?php print_string('dataroot', 'install') ?></p></td>
<td class="td_right">
<input type="text" size="40" name="dataroot" value="<?php echo $INSTALL['dataroot'] ?>" />
</td>
</tr>
<?php
break;
case 3: /// Database settings
?>
<tr>
<td class="td_left"><p><?php print_string('dbtype', 'install') ?></p></td>
<td class="td_right">
<?php choose_from_menu (array("mysql" => "mysql", "postgres7" => "postgres7"), 'dbtype', $INSTALL['dbtype'], '') ?>
</td>
</tr>
<tr>
<td class="td_left"><p><?php print_string('dbhost', 'install') ?></p></td>
<td class="td_right">
<input type="text" size="40" name="dbhost" value="<?php echo $INSTALL['dbhost'] ?>" />
</td>
</tr>
<tr>
<td class="td_left"><p><?php print_string('database', 'install') ?></p></td>
<td class="td_right">
<input type="text" size="40" name="dbname" value="<?php echo $INSTALL['dbname'] ?>" />
</td>
</tr>
<tr>
<td class="td_left"><p><?php print_string('user') ?></p></td>
<td class="td_right">
<input type="text" size="40" name="dbuser" value="<?php echo $INSTALL['dbuser'] ?>" />
</td>
</tr>
<tr>
<td class="td_left"><p><?php print_string('password') ?></p></td>
<td class="td_right">
<input type="text" size="40" name="dbpass" value="<?php echo $INSTALL['dbpass'] ?>" />
</td>
</tr>
<tr>
<td class="td_left"><p><?php print_string('dbprefix', 'install') ?></p></td>
<td class="td_right">
<input type="text" size="40" name="prefix" value="<?php echo $INSTALL['prefix'] ?>" />
</td>
</tr>
<?php
break;
case 4: /// Administration directory setting
?>
<tr>
<td class="td_left"><p><?php print_string('admindirname', 'install') ?></p></td>
<td class="td_right">
<input type="text" size="40" name="admindirname" value="<?php echo $INSTALL['admindirname'] ?>" />
</td>
</tr>
<?php
break;
default:
}
?>
<tr>
<td align="left">
<?php echo ($nextstage > 1) ? "<input type=\"submit\" name=\"prev\" value=\"".get_string('previous')."\" />\n" : "&nbsp;\n" ?>
</td>
<td align="right">
<?php echo ($nextstage < 5) ? "<input type=\"submit\" name=\"next\" value=\"".get_string('next')."\" />\n" : "&nbsp;\n" ?>
</td>
</tr>
</table>
</form>
<?php
}
//==========================================================================//
function css_styles() {
?>
<style type="text/css">
body { background-color: #ffeece; }
p { font-family: helvetica, arial, sans-serif; size: normal; }
a { text-decoration: none; color: blue; }
.errormsg {
color: red;
font-weight: bold;
}
.install_table {
width: 500px;
}
.td_left {
text-align: right;
font-weight: bold;
}
.td_right {
text-align: left;
}
.main {
width: 500px;
border-width: 1px;
border-style: solid;
border-color: #ffc85f;
-moz-border-radius-bottomleft: 15px;
-moz-border-radius-bottomright: 15px;
}
.td_mainheading {
background-color: #fee6b9;
}
.td_main {
text-align: center;
}
.p_mainheading {
font-size: 10pt;
}
</style>
<?php
}
?>

56
lang/en/install.php Executable file
View File

@ -0,0 +1,56 @@
<?php // $Id$
$string['admindirerror'] = 'The admin directory specified is incorrect';
$string['admindirname'] = 'Admin Directory';
$string['admindirsetting'] = "
<p>A very few webhosts use /admin as a special URL for you to access a
control panel or something. Unfortunately this conflicts with the
standard location for the Moodle admin pages. You can fix this by
renaming the admin directory in your installation, and putting that
new name here. For example: <blockquote> moodleadmin</blockquote>.
This will fix admin links in Moodle.</p>";
$string['chooselanguage'] = 'Choose a language';
$string['configfilenotwritten'] = "The installer script was not able to automatically create a config.php file containing your chosen settings. Please copy the following code into a file named config.php within the root directory of Moodle.";
$string['configfilewritten'] = "config.php has been successfully created";
$string['configurationcomplete'] = 'Configuration completed';
$string['database'] = 'Database';
$string['databasesettings'] = "
<p>Now you need to configure the database where most Moodle data
will be stored. This database must already have been created
and a username and password created to access it.</p>
<p>Type: mysql or postgres7<br />
Host Server: eg localhost or db.isp.com<br />
Name: database name, eg moodle<br />
User: your database username<br />
Password: your database password<br />
Tables Prefix: prefix to use for all table names</p>";
$string['dataroot'] = 'Data';
$string['datarooterror'] = "The 'Data' setting is incorrect";
$string['dbconnectionerror'] = 'Database connection error. Please check your database settings';
$string['dbcreationerror'] = 'Database creation error. Could not create the given database name with the settings provided';
$string['dbhost'] = 'Host Server';
$string['dbpass'] = 'Password';
$string['dbprefix'] = 'Tables prefix';
$string['dbtype'] = 'Type';
$string['directorysettings'] = "
<p><b>WWW:</b>
You need to tell Moodle where it is located. Specify the full
web address to where moodle has been installed. If your web site
is accessible via multiple URLs then choose the most natural one
that your students would use. Do not include a trailing slash</p>
<p><b>Directory:</b>
Specify the full OS directory path to this same location
Make sure the upper/lower case is correct</p>
<p><b>Data:</b>
You need a place where Moodle can save uploaded files. This
directory should be readable AND WRITEABLE by the web server user
(usually 'nobody' or 'apache'), but it should not be accessible
directly via the web.</p>";
$string['dirroot'] = 'Directory';
$string['dirrooterror'] = "The 'Directory' setting was incorrect. Try the following setting";
$string['wwwroot'] = 'WWW';
$string['wwwrooterror'] = "The 'WWW' setting is incorrect";
?>