From: moodler <moodler> Date: Thu, 12 Aug 2004 15:53:32 +0000 (+0000) Subject: New automatic installation script! No need to make config.php anymore! X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=8b5b10281c789fde79a391f3079264452321a16e;p=moodle.git 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. --- diff --git a/index.php b/index.php index af08858d5e..c1e5cefe8f 100644 --- a/index.php +++ b/index.php @@ -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); diff --git a/install.php b/install.php new file mode 100644 index 0000000000..2e1c16735e --- /dev/null +++ b/install.php @@ -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" : " \n" ?> + </td> + <td align="right"> + <?php echo ($nextstage < 5) ? "<input type=\"submit\" name=\"next\" value=\"".get_string('next')."\" />\n" : " \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 +} +?> diff --git a/lang/en/install.php b/lang/en/install.php new file mode 100755 index 0000000000..d639a1ca16 --- /dev/null +++ b/lang/en/install.php @@ -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"; + +?>