summaryrefslogtreecommitdiff
path: root/install.php
diff options
context:
space:
mode:
authorchris <chris@jalakai.co.uk>2006-07-24 20:54:04 +0200
committerchris <chris@jalakai.co.uk>2006-07-24 20:54:04 +0200
commit5cfb88156f790ba8677badc88863a85569149942 (patch)
treeae3bf378346b8bb6841b6a90a90c20873582a395 /install.php
parent11ea018f9b6b30192b2a8c08a85265bdf9d3ce21 (diff)
downloadrpg-5cfb88156f790ba8677badc88863a85569149942.tar.gz
rpg-5cfb88156f790ba8677badc88863a85569149942.tar.bz2
installation script
This installation script doesn't so much install DokuWiki as configure a brand new DokuWiki installation for first use by: - setting the Wiki name - turning on ACL - creating the super user - creating the changes.log file darcs-hash:20060724185404-9b6ab-5b9dd6d0231db6522388a860b72da608c21df691.gz
Diffstat (limited to 'install.php')
-rw-r--r--install.php410
1 files changed, 410 insertions, 0 deletions
diff --git a/install.php b/install.php
new file mode 100644
index 000000000..6f9e5823a
--- /dev/null
+++ b/install.php
@@ -0,0 +1,410 @@
+<?php
+/**
+ * Dokuwiki installation assistance
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__)).'/');
+if(!defined('DOKU_CONF')) define('DOKU_CONF',DOKU_INC.'conf/');
+if(!defined('DOKU_LOCAL')) define('DOKU_LOCAL',DOKU_INC.'conf/');
+
+if(!defined('DEBUG')) define('DEBUG', false);
+
+// ------------------------------------------------------------------------------------
+// important settings ...
+// installation dependent local config file list
+$config_files = array(
+ 'local' => DOKU_LOCAL.'local.php',
+ 'users' => DOKU_LOCAL.'users.auth.php',
+ 'auth' => DOKU_LOCAL.'acl.auth.php'
+);
+
+// other installation dir/file permission requirements
+$install_permissions = array(
+ 'data' => 'data',
+ 'pages' => 'data/pages',
+ 'attic' => 'data/attic',
+ 'media' => 'data/media',
+ 'meta' => 'data/meta',
+ 'cache' => 'data/cache',
+ 'locks' => 'data/locks',
+ 'changelog' => 'data/changes.log'
+);
+
+// array use to verify unchanged dokuwiki.php files, 'version' => 'md5 hash'
+$dokuwiki_php = DOKU_CONF.'dokuwiki.php';
+$dokuwiki_hash = array(
+ '2005-09-22' => 'e33223e957b0b0a130d0520db08f8fb7',
+ '2006-03-05' => '51295727f79ab9af309a2fd9e0b61acc',
+ '2006-03-09' => '51295727f79ab9af309a2fd9e0b61acc',
+);
+
+// language strings
+
+// ------------------------------------------------------------------------------------
+// initialise variables ...
+
+$msg = array();
+$error = array();
+$debug = array();
+$process_form = false;
+
+// form variables with default values
+$title = "";
+$location = true;
+$data = "./data";
+$changeslog = true;
+$acl = true;
+$superuser = "";
+$fullname = "";
+$email = "";
+
+// check for dokuwiki
+// (for now assume included with Dokuwiki install & resident in dokuwiki root folder)
+
+// ------------------------------------------------------------------------------------
+// check for virgin dokuwiki installation
+$virgin_install = true;
+
+ // $config_files mustn't exist
+ foreach ($config_files as $file) {
+ if (@file_exists($file)) {
+ $virgin_install = false;
+ $file = str_replace($_SERVER['DOCUMENT_ROOT'],'{DOCUMENT_ROOT}', $file);
+ $msg[] = "<span class=\"file\">$file</span> exists"; }
+ }
+
+ // main dokuwiki config file (conf/dokuwiki.php) must not have been modified
+ $installation_hash = md5(@file_get_contents($dokuwiki_php));
+ if (!in_array($installation_hash, $dokuwiki_hash)) {
+ $virgin_install = false;
+ $msg[] = "unrecognised or modified dokuwiki.php -- hash=$installation_hash";
+ }
+// ------------------------------------------------------------------------------------
+// check for other basic installation & configuration details (to be nice)
+
+$changeslog_exists = @file_exists(DOKU_INC.'data/changes.log');
+
+if (!is_writable(DOKU_CONF)) {
+ $file = str_replace($_SERVER['DOCUMENT_ROOT'],'{DOCUMENT_ROOT}', DOKU_CONF);
+ $error[] = "<span class=\"file\">$file</span> must be writable by the web server.";
+}
+
+//-------------------------------------------------------------------------------------
+// utility functions
+
+/**
+ * remove magic quotes recursivly
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function remove_magic_quotes(&$array) {
+ foreach (array_keys($array) as $key) {
+ if (is_array($array[$key])) {
+ remove_magic_quotes($array[$key]);
+ }else {
+ $array[$key] = stripslashes($array[$key]);
+ }
+ }
+}
+
+function cleanText($var, $default, $regex, $msg) {
+ global $error;
+
+ $value = isset($_REQUEST[$var]) ? $_REQUEST[$var] : $default;
+
+ if ($regex) {
+ if (!preg_match($regex, $value)) {
+ $error[] = "$var - illegal/unrecognised value";
+ }
+ }
+ return $value;
+}
+
+function fileWrite($name, $filename, $data) {
+ global $error;
+
+ if (($fp = @fopen($filename, 'wb')) === false) {
+ $filename = str_replace($_SERVER['DOCUMENT_ROOT'],'{DOCUMENT_ROOT}', $filename);
+ $error[] = "Unable to create $name (<span class=\"file\">$filename</span>). You will need to check directory/file permissions and create the file manually.";
+ return false;
+ }
+
+ if (!empty($data)) { fwrite($fp, $data); }
+ fclose($fp);
+ return true;
+}
+
+// ------------------------------------------------------------------------------------
+// form processing ...
+if (isset($_REQUEST['submit'])) {
+ if (!$virgin_install) {
+ $msg[] = "unable to apply updates, installation already modified";
+
+ } else {
+ // apply updates per form instructions
+ $process_form = true;
+
+ if (get_magic_quotes_gpc()) {
+ if (!empty($_REQUEST)) remove_magic_quotes($_REQUEST);
+ }
+
+ $title = cleanText('title', '', '');
+ $location = isset($_REQUEST['location']);
+ $data = cleanText('data', '', '');
+ $changeslog = isset($_REQUEST['changeslog']);
+ $acl = isset($_REQUEST['acl']);
+ $superuser = cleanText('superuser','','/\S+/', );
+ $password = cleanText('password','','/\S+/');
+ $confirm = cleanText('confirm','','/^'.preg_quote($password,'/').'$/');
+ $fullname = cleanText('fullname','','');
+ $email = cleanText('email','','');
+
+ $debug = compact('title','location','data','changeslog','acl','superuser','password','confirm');
+
+ if (empty($error)) {
+ // all incoming data is ok ... lets do ...
+ // create changes.log
+ if (!$changeslog_exists) {
+ $filename = realpath((empty($data) || ($data{0} != "/")) ? DOKU_INC.$data : $data).'/changes.log';
+ fileWrite('changeslog',$filename, '');
+ }
+
+ // create local.php
+ $output = "";
+ if (!empty($title)) $output .= '$conf[\'title\'] = \''.addslashes($title)."';\n";
+ if (!empty($data)) $output .= '$conf[\'data\'] = \''.$data."';\n";
+ if ($acl) $output .= '$conf[\'useacl\'] = 1'.";\n";
+ if (!empty($superuser)) $output .= '$conf[\'superuser\'] = \''.$superuser."';\n";
+
+ if (!empty($output)) {
+ $output = '<'.'?php
+/*
+ * Dokuwiki\'s Main Configuration File - Local Settings
+ * Auto-generated by install script
+ * Date: '.date('r').'
+ */'."\n".$output;
+ fileWrite('local configuration settings file',DOKU_LOCAL.'local.php',$output);
+ }
+
+ if ($acl) {
+ // create users.auth.php
+ // --- user:MD5password:Real Name:email:groups,comma,seperated
+ $output = (!empty($superuser)) ? join(":",array($superuser, md5($password), $fullname, $email, 'users')) : "";
+ $output = @file_get_contents(DOKU_CONF.'users.auth.php.dist')."\n$output\n";
+
+ fileWrite('acl user file', DOKU_LOCAL.'users.auth.php', $output);
+
+ // create acl.auth.php
+ $output = @file_get_contents(DOKU_CONF.'acl.auth.php.dist');
+ fileWrite('acl authorisations file', DOKU_LOCAL.'acl.auth.php', $output);
+ }
+ }
+ }
+}
+//-------------------------------------------------------------------------------------
+
+$show_form = !$process_form && $virgin_install && empty($error);
+
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >
+<head>
+<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />
+<title>Dokuwiki Installer</title>
+<style type="text/css">
+<!--/*--><![CDATA[/*><!--*/
+
+html {margin: 0; padding: 0;}
+body {
+ width: 90%;
+ margin: 0 auto;
+ font: 84% Verdana, Helvetica, Arial, sans-serif;
+}
+
+a {
+ white-space: nowrap;
+}
+
+img {
+ border: none;
+}
+
+.abbr {
+ border-bottom: 2px dotted #444;
+}
+
+.alert .file {
+ color: #a03333;
+}
+
+.error .file {
+ color: #c33;
+}
+
+h1 img {
+ vertical-align: middle;
+}
+
+form, fieldset {
+ margin: 1em 0;
+ padding: 0;
+ border: none;
+ width: 100%;
+}
+
+ul {
+ font-size: 80%;
+}
+
+form .field {
+ margin: 0.5em 0;
+}
+
+label {
+ display: block;
+}
+
+label span {
+ display: block;
+}
+
+label input.text {
+ width: 95%;
+}
+
+#instructions {
+ float: right;
+ width: 34%;
+}
+
+#details {
+ float: left;
+ width: 58%;
+}
+
+#process {
+ margin: 1.5em 0;
+}
+
+#debug, #footer {
+ clear: both;
+}
+
+#acl, #files {
+ border: 1px solid #ccc;
+ padding: 0.5em 0 1em 0;
+}
+
+fieldset.dependent {
+ margin-left: 2em;
+}
+
+
+/*]]>*/-->
+</style>
+<script type="text/javascript">
+<!--//--><![CDATA[//><!--
+
+
+//--><!]]>
+</script>
+</head>
+<body>
+<h1><img src="http://wiki.splitbrain.org/_media/wiki:dokuwiki-64.png" alt="" />Dokuwiki Installer</h1>
+<div id="instructions">
+ <p>This page assists in the installation and configuration of <a href="http://wiki.splitbrain.org">Dokuwiki</a>.</p>
+ <p>Dokuwiki uses ordinary files for the storage of wiki pages and other information associated with those pages
+ (e.g. images, search indexes, old revisions, etc). In order to operate successfully Dokuwiki <strong>must</strong>
+ have write access to the directories that hold those files. This installer is not capable of setting up directory
+ permissions, that normally needs to be done directly or if you are using hosting, through your hosting
+ control panel (e.g. cPanel).</p>
+ <p>This installer will setup your Dokuwiki configuration for <span class="abbr" title="access control list">ACL</span>,
+ which in turn allows administrator login and access to Dokuwiki's admin menu for installing plugins, managing
+ users, managing access to wiki pages and alteration of configuration settings. It isn't required for Dokuwiki to
+ operate, however it will make Dokuwiki easier to administer.</p>
+ <p>Use these links for details concerning <a href="http://wiki.splitbrain.org/wiki:installation">installation instructions</a>
+ and <a href="http://wiki.splitbrain.org/wiki:configuration">configuration settings</a>.</p>
+</div>
+<div id="details">
+<?php if (!$virgin_install) { ?>
+ <p>Modified installation detected.</p>
+ <ul class="alert">
+<?php foreach ($msg as $text) { ?>
+ <li><?php echo $text?></li>
+<?php } ?>
+ </ul>
+ <p>For security reasons this script will only work with a new &amp; unmodified Dokuwiki installation.
+ You should either re-extract the files from the downloaded package or consult the complete
+ <a href="http://wiki.splitbrain.org/wiki:install">Dokuwiki installation instructions</a></p>
+<?php } /* end if (!virgin_install) */ ?>
+<?php if (!$process_form && !empty($error)) { ?>
+ <p>One or more incorrect directory/file permissions were found.</p>
+ <ul class="error">
+<?php foreach ($error as $text) { ?>
+ <li><?php echo $text ?></li>
+<?php } ?>
+ </ul>
+ <p>In order to complete this installation the above directories and files need to have their
+ permissions altered as indicated. Please correct the above problems before trying again.</p>
+<?php } /* end if (!$process_form && !empty($error)) */ ?>
+<?php if ($process_form) { ?>
+<?php if (empty($error)) { ?>
+ <p>Configuration updated successfully.</p>
+ <p>Now that your initial dokuwiki configuration has been set you should delete this file to prevent its further use
+ which may damage your dokuwiki installation and/or configuration.</p>
+ <p>Use this link to visit your new <a href="doku.php" title="my new dokuWiki">wiki</a></p>
+<?php } else { ?>
+ <p>The following errors were encountered ... </p>
+ <ul class="error">
+<?php foreach ($error as $text) { ?>
+ <li><?php echo $text?></li>
+<?php } ?>
+ </ul>
+ <p>return to <a href="install.php">installation form</a></p>
+<?php } ?>
+<?php } ?>
+<?php if ($show_form) { ?>
+ <form action="" method="post">
+ <fieldset id="wiki">
+ <div class="field"><label><span> Wiki Name </span><input class="text" type="text" name="title" value="<?php echo $title ?>" /></label></div>
+ <fieldset id="acl">
+ <div class="field"><label><input class="checkbox" type="checkbox" name="acl" <?php echo(($acl ? 'checked="checked"' : ''));?> /> Enable ACL </label></div>
+ <fieldset class="dependent">
+ <div class="field"><label><span> Superuser </span><input class="text" type="text" name="superuser" value="<?php echo $superuser ?>" /></label></div>
+ <div class="field"><label><span> Full name </span><input class="text" type="text" name="fullname" value="<?php echo $fullname ?>" /></label></div>
+ <div class="field"><label><span> Email Address </span><input class="text" type="text" name="email" value="<?php echo $email ?>" /></label></div>
+ <div class="field"><label><span> Superuser password </span><input class="text" type="password" name="password" /></label></div>
+ <div class="field"><label><span> Confirm password </span><input class="text" type="password" name="confirm" /></label></div>
+ </fieldset>
+ </fieldset>
+ <fieldset id="files">
+ <div class="field"><label><input class="checkbox" type="checkbox" name="location" <?php echo(($location ? 'checked="checked"' : ''));?> />Use default wiki location</label></div>
+ <fieldset class="dependent">
+ <div class="field"><label><span> Wiki Location </span><input class="text" type="text" name="data" value="<?php echo $data ?>" /></label></div>
+ </fieldset>
+ </fieldset>
+<?php if (!$changeslog_exists) { ?>
+ <div class="field"><label><input class="checkbox" type="checkbox" name="changeslog" <?php echo(($changeslog ? 'checked="checked"' : ''));?> />Create changes.log file</label></div>
+<?php } ?>
+ </fieldset>
+ <fieldset id="process">
+ <input class="button" type="submit" name="submit" value="Process Configuration Changes" />
+ </fieldset>
+ </form>
+<?php } ?>
+</div><!-- #details -->
+<?php if (DEBUG) { ?>
+<div id="debug">
+ <pre>
+ <?php print_r($_REQUEST); print_r($debug); print_r($error); ?>
+ </pre>
+</div>
+<?php } ?>
+<div id="footer">
+ <a href="http://wiki.splitbrain.org"><img src="lib/tpl/default/images/button-dw.png" alt="powered by dokuwiki" /></a>
+ <a href="http://www.php.net"><img src="lib/tpl/default/images/button-php.gif" alt="powered by php" /></a>
+</div>
+</body>
+</html> \ No newline at end of file