*/
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/');
// check for error reporting override or set error reporting to sane values
if (!defined('DOKU_E_LEVEL')) { error_reporting(E_ALL ^ E_NOTICE); }
else { error_reporting(DOKU_E_LEVEL); }
// kill magic quotes
if (get_magic_quotes_gpc() && !defined('MAGIC_QUOTES_STRIPPED')) {
if (!empty($_GET)) remove_magic_quotes($_GET);
if (!empty($_POST)) remove_magic_quotes($_POST);
if (!empty($_COOKIE)) remove_magic_quotes($_COOKIE);
if (!empty($_REQUEST)) remove_magic_quotes($_REQUEST);
@ini_set('magic_quotes_gpc', 0);
define('MAGIC_QUOTES_STRIPPED',1);
}
@set_magic_quotes_runtime(0);
@ini_set('magic_quotes_sybase',0);
// language strings
require_once(DOKU_INC.'inc/lang/en/lang.php');
$LC = preg_replace('/[^a-z\-]+/','',$_REQUEST['l']);
if(!$LC) $LC = 'en';
if($LC && $LC != 'en' ) {
require_once(DOKU_INC.'inc/lang/'.$LC.'/lang.php');
}
// initialise variables ...
$error = array();
$dokuwiki_hash = array(
'2005-09-22' => 'e33223e957b0b0a130d0520db08f8fb7',
'2006-03-05' => '51295727f79ab9af309a2fd9e0b61acc',
'2006-03-09' => '51295727f79ab9af309a2fd9e0b61acc',
'2006-11-06' => 'b3a8af76845977c2000d85d6990dd72b',
'2007-05-24' => 'd80f2740c84c4a6a791fd3c7a353536f',
'2007-06-26' => 'b3ca19c7a654823144119980be73cd77',
);
// begin output
header('Content-Type: text/html; charset=utf-8');
?>
\n";
include(DOKU_INC.'inc/lang/en/install.html');
print "
\n";
}
?>
'.$lang['i_problems'].'';
print_errors();
print_retry();
}elseif(!check_configs()){
echo '
'.$lang['i_modified'].'
';
print_errors();
}elseif($_REQUEST['submit']){
if(!check_data($_REQUEST['d'])){
print_errors();
print_form($_REQUEST['d']);
}elseif(!store_data($_REQUEST['d'])){
echo '
'.$lang['i_failure'].'
';
print_errors();
}else{
echo '
'.$lang['i_success'].'
';
}
}else{
print_form($_REQUEST['d']);
}
?>
*/
function store_data($d){
global $LC;
$ok = true;
$d['policy'] = (int) $d['policy'];
// create local.php
$now = date('r');
$output = <<
# Don't modify the lines above
#
# Access Control Lists
#
# Auto-generated by install script
# Date: $now
EOT;
if($d['policy'] == 2){
$output .= "* @ALL 0\n";
$output .= "* @user 8\n";
}elseif($d['policy'] == 1){
$output .= "* @ALL 1\n";
$output .= "* @user 8\n";
}else{
$output .= "* @ALL 8\n";
}
$ok = $ok && fileWrite(DOKU_LOCAL.'acl.auth.php', $output);
}
return $ok;
}
/**
* Write the given content to a file
*
* @author Chris Smith
*/
function fileWrite($filename, $data) {
global $error;
global $lang;
if (($fp = @fopen($filename, 'wb')) === false) {
$filename = str_replace($_SERVER['DOCUMENT_ROOT'],'{DOCUMENT_ROOT}/', $filename);
$error[] = sprintf($lang['i_writeerr'],$filename);
return false;
}
if (!empty($data)) { fwrite($fp, $data); }
fclose($fp);
return true;
}
/**
* check installation dependent local config files and tests for a known
* unmodified main config file
*
* @author Chris Smith
*/
function check_configs(){
global $error;
global $lang;
global $dokuwiki_hash;
$ok = true;
$config_files = array(
'local' => DOKU_LOCAL.'local.php',
'users' => DOKU_LOCAL.'users.auth.php',
'auth' => DOKU_LOCAL.'acl.auth.php'
);
// main dokuwiki config file (conf/dokuwiki.php) must not have been modified
$installation_hash = md5(preg_replace("/(\015\012)|(\015)/","\012",
@file_get_contents(DOKU_CONF.'dokuwiki.php')));
if (!in_array($installation_hash, $dokuwiki_hash)) {
$error[] = sprintf($lang['i_badhash'],$installation_hash);
$ok = false;
}
// configs shouldn't exist
foreach ($config_files as $file) {
if (@file_exists($file)) {
$file = str_replace($_SERVER['DOCUMENT_ROOT'],'{DOCUMENT_ROOT}/', $file);
$error[] = sprintf($lang['i_confexists'],$file);
$ok = false;
}
}
return $ok;
}
/**
* Check other installation dir/file permission requirements
*
* @author Chris Smith
*/
function check_permissions(){
global $error;
global $lang;
$dirs = array(
'conf' => DOKU_LOCAL,
'data' => DOKU_INC.'data',
'pages' => DOKU_INC.'data/pages',
'attic' => DOKU_INC.'data/attic',
'media' => DOKU_INC.'data/media',
'meta' => DOKU_INC.'data/meta',
'cache' => DOKU_INC.'data/cache',
'locks' => DOKU_INC.'data/locks',
'index' => DOKU_INC.'data/index',
);
$ok = true;
foreach($dirs as $dir){
if(!@file_exists("$dir/.") || !@is_writable($dir)){
$dir = str_replace($_SERVER['DOCUMENT_ROOT'],'{DOCUMENT_ROOT}', $dir);
$error[] = sprintf($lang['i_permfail'],$dir);
$ok = false;
}
}
return $ok;
}
/**
* Check the availability of functions used in DokuWiki and the PHP version
*
* @author Andreas Gohr
*/
function check_functions(){
global $error;
global $lang;
$ok = true;
if(version_compare(phpversion(),'4.3.3','<')){
$error[] = sprintf($lang['i_phpver'],phpversion(),'4.3.3');
$ok = false;
}
$funcs = explode(' ','addslashes basename call_user_func chmod copy fgets '.
'file file_exists fseek flush filesize ftell fopen '.
'glob header ignore_user_abort ini_get mail mkdir '.
'ob_start opendir parse_ini_file readfile realpath '.
'rename rmdir serialize session_start unlink usleep '.
'preg_replace');
if (!function_exists('mb_substr')) {
$funcs[] = 'utf8_encode';
$funcs[] = 'utf8_decode';
}
foreach($funcs as $func){
if(!function_exists($func)){
$error[] = sprintf($lang['i_funcna'],$func);
$ok = false;
}
}
return $ok;
}
/**
* Print language selection
*
* @author Andreas Gohr
*/
function langsel(){
global $lang;
global $LC;
$dir = DOKU_INC.'inc/lang';
$dh = opendir($dir);
if(!$dh) return;
$langs = array();
while (($file = readdir($dh)) !== false) {
if(preg_match('/^[\._]/',$file)) continue;
if(is_dir($dir.'/'.$file) && @file_exists($dir.'/'.$file.'/lang.php')){
$langs[] = $file;
}
}
closedir($dh);
sort($langs);
echo '';
}
/**
* Print gloabl error array
*
* @author Andreas Gohr
*/
function print_errors(){
global $error;
echo '';
foreach ($error as $err){
echo "- $err
";
}
echo '
';
}
/**
* remove magic quotes recursivly
*
* @author Andreas Gohr
*/
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]);
}
}
}