xref: /dokuwiki/install.php (revision 64159a61e94d0ce680071c8890e144982c3a8cbe)
15cfb8815Schris<?php
2ac251797SAndreas Gohr/*><div style="width:60%; margin: auto; background-color: #fcc;
3ac251797SAndreas Gohr                border: 1px solid #faa; padding: 0.5em 1em;">
4ac251797SAndreas Gohr    <h1 style="font-size: 120%">No PHP Support</h1>
5ac251797SAndreas Gohr
6ac251797SAndreas Gohr    It seems this server has no PHP support enabled. You will need to
7ac251797SAndreas Gohr    enable PHP before you can install and run DokuWiki. Contact your hosting
8ac251797SAndreas Gohr    provider if you're unsure what this means.
9ac251797SAndreas Gohr
10ac251797SAndreas Gohr</div>*/
115cfb8815Schris/**
125cfb8815Schris * Dokuwiki installation assistance
135cfb8815Schris *
145cfb8815Schris * @author      Chris Smith <chris@jalakai.co.uk>
155cfb8815Schris */
165cfb8815Schris
17d0a27cb0SAndreas Gohrif(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/');
185cfb8815Schrisif(!defined('DOKU_CONF')) define('DOKU_CONF',DOKU_INC.'conf/');
195cfb8815Schrisif(!defined('DOKU_LOCAL')) define('DOKU_LOCAL',DOKU_INC.'conf/');
205cfb8815Schris
2102bca5d4SYousong Zhou// load and initialize the core system
2202bca5d4SYousong Zhourequire_once(DOKU_INC.'inc/init.php');
233791b589SAndreas Gohr
243545b2e0Schris// check for error reporting override or set error reporting to sane values
253545b2e0Schrisif (!defined('DOKU_E_LEVEL')) { error_reporting(E_ALL ^ E_NOTICE); }
263545b2e0Schriselse { error_reporting(DOKU_E_LEVEL); }
273545b2e0Schris
2847248316SAndreas Gohr// language strings
2947248316SAndreas Gohrrequire_once(DOKU_INC.'inc/lang/en/lang.php');
304b530faaSTom N Harrisif(isset($_REQUEST['l']) && !is_array($_REQUEST['l'])) {
3147248316SAndreas Gohr    $LC = preg_replace('/[^a-z\-]+/','',$_REQUEST['l']);
324b530faaSTom N Harris}
334b530faaSTom N Harrisif(empty($LC)) $LC = 'en';
3447248316SAndreas Gohrif($LC && $LC != 'en' ) {
3547248316SAndreas Gohr    require_once(DOKU_INC.'inc/lang/'.$LC.'/lang.php');
3647248316SAndreas Gohr}
3747248316SAndreas Gohr
3847248316SAndreas Gohr// initialise variables ...
3947248316SAndreas Gohr$error = array();
4047248316SAndreas Gohr
4147248316SAndreas Gohr// begin output
4247248316SAndreas Gohrheader('Content-Type: text/html; charset=utf-8');
4347248316SAndreas Gohr?>
44c8839c22SAnika Henke<!DOCTYPE html>
45c8839c22SAnika Henke<html lang="<?php echo $LC?>" dir="<?php echo $lang['direction']?>">
4647248316SAndreas Gohr<head>
47c8839c22SAnika Henke    <meta charset="utf-8" />
484208c142SAndreas Gohr    <title><?php echo $lang['i_installer']?></title>
4947248316SAndreas Gohr    <style type="text/css">
5047248316SAndreas Gohr        body { width: 90%; margin: 0 auto; font: 84% Verdana, Helvetica, Arial, sans-serif; }
5147248316SAndreas Gohr        img { border: none }
5247248316SAndreas Gohr        br.cl { clear:both; }
5370a6aa16Schris        code { font-size: 110%; color: #800000; }
5447248316SAndreas Gohr        fieldset { border: none }
559c70688aSchris        label { display: block; margin-top: 0.5em; }
568af2e4bbSAndreas Gohr        select.text, input.text { width: 30em; margin: 0 0.5em; }
5706361442SAndreas Gohr        a {text-decoration: none}
5847248316SAndreas Gohr    </style>
59e260f93bSAnika Henke    <script type="text/javascript">
6047248316SAndreas Gohr        function acltoggle(){
6147248316SAndreas Gohr            var cb = document.getElementById('acl');
6247248316SAndreas Gohr            var fs = document.getElementById('acldep');
6347248316SAndreas Gohr            if(!cb || !fs) return;
6447248316SAndreas Gohr            if(cb.checked){
6547248316SAndreas Gohr                fs.style.display = '';
6647248316SAndreas Gohr            }else{
6747248316SAndreas Gohr                fs.style.display = 'none';
6847248316SAndreas Gohr            }
6947248316SAndreas Gohr        }
7047248316SAndreas Gohr        window.onload = function(){
7147248316SAndreas Gohr            acltoggle();
7247248316SAndreas Gohr            var cb = document.getElementById('acl');
7347248316SAndreas Gohr            if(cb) cb.onchange = acltoggle;
7447248316SAndreas Gohr        };
7547248316SAndreas Gohr    </script>
7647248316SAndreas Gohr</head>
7747248316SAndreas Gohr<body style="">
7847248316SAndreas Gohr    <h1 style="float:left">
79c5270434SAndreas Gohr        <img src="lib/exe/fetch.php?media=wiki:dokuwiki-128.png"
80c5270434SAndreas Gohr             style="vertical-align: middle;" alt="" height="64" width="64" />
8147248316SAndreas Gohr        <?php echo $lang['i_installer']?>
8247248316SAndreas Gohr    </h1>
8347248316SAndreas Gohr    <div style="float:right; margin: 1em;">
8447248316SAndreas Gohr        <?php langsel()?>
8547248316SAndreas Gohr    </div>
8647248316SAndreas Gohr    <br class="cl" />
8747248316SAndreas Gohr
8847248316SAndreas Gohr    <div style="float: right; width: 34%;">
8947248316SAndreas Gohr        <?php
9079e79377SAndreas Gohr            if(file_exists(DOKU_INC.'inc/lang/'.$LC.'/install.html')){
9147248316SAndreas Gohr                include(DOKU_INC.'inc/lang/'.$LC.'/install.html');
9247248316SAndreas Gohr            }else{
93ca64d724Schris                print "<div lang=\"en\" dir=\"ltr\">\n";
9447248316SAndreas Gohr                include(DOKU_INC.'inc/lang/en/install.html');
95ca64d724Schris                print "</div>\n";
9647248316SAndreas Gohr            }
9747248316SAndreas Gohr        ?>
98*64159a61SAndreas Gohr        <a style="
99*64159a61SAndreas Gohr                background: transparent
100*64159a61SAndreas Gohr                url(data/dont-panic-if-you-see-this-in-your-logs-it-means-your-directory-permissions-are-correct.png)
101*64159a61SAndreas Gohr                left top no-repeat;
102c8b43921SAndreas Gohr                display: block; width:380px; height:73px; border:none; clear:both;"
103c8b43921SAndreas Gohr           target="_blank"
104c8b43921SAndreas Gohr           href="http://www.dokuwiki.org/security#web_access_security"></a>
10547248316SAndreas Gohr    </div>
10647248316SAndreas Gohr
10747248316SAndreas Gohr    <div style="float: left; width: 58%;">
10847248316SAndreas Gohr        <?php
10947248316SAndreas Gohr            if(! (check_functions() && check_permissions()) ){
11047248316SAndreas Gohr                echo '<p>'.$lang['i_problems'].'</p>';
11147248316SAndreas Gohr                print_errors();
11270a6aa16Schris                print_retry();
11347248316SAndreas Gohr            }elseif(!check_configs()){
11447248316SAndreas Gohr                echo '<p>'.$lang['i_modified'].'</p>';
11547248316SAndreas Gohr                print_errors();
1164b530faaSTom N Harris            }elseif(check_data($_REQUEST['d'])){
1174b530faaSTom N Harris                // check_data has sanitized all input parameters
1184b530faaSTom N Harris                if(!store_data($_REQUEST['d'])){
11947248316SAndreas Gohr                    echo '<p>'.$lang['i_failure'].'</p>';
12047248316SAndreas Gohr                    print_errors();
12147248316SAndreas Gohr                }else{
12247248316SAndreas Gohr                    echo '<p>'.$lang['i_success'].'</p>';
12347248316SAndreas Gohr                }
12447248316SAndreas Gohr            }else{
1254b530faaSTom N Harris                print_errors();
12647248316SAndreas Gohr                print_form($_REQUEST['d']);
12747248316SAndreas Gohr            }
12847248316SAndreas Gohr        ?>
12947248316SAndreas Gohr    </div>
13047248316SAndreas Gohr
131c8b43921SAndreas Gohr
13247248316SAndreas Gohr<div style="clear: both">
133654436fbSAnika Henke  <a href="http://dokuwiki.org/"><img src="lib/tpl/dokuwiki/images/button-dw.png" alt="driven by DokuWiki" /></a>
13459752844SAnders Sandblad  <a href="http://php.net"><img src="lib/tpl/dokuwiki/images/button-php.gif" alt="powered by PHP" /></a>
13547248316SAndreas Gohr</div>
13647248316SAndreas Gohr</body>
13747248316SAndreas Gohr</html>
13847248316SAndreas Gohr<?php
13947248316SAndreas Gohr
14047248316SAndreas Gohr/**
14147248316SAndreas Gohr * Print the input form
142253d4b48SGerrit Uitslag *
143253d4b48SGerrit Uitslag * @param array $d submitted entry 'd' of request data
14447248316SAndreas Gohr */
14547248316SAndreas Gohrfunction print_form($d){
14647248316SAndreas Gohr    global $lang;
14747248316SAndreas Gohr    global $LC;
14847248316SAndreas Gohr
14906361442SAndreas Gohr    include(DOKU_CONF.'license.php');
15006361442SAndreas Gohr
15147248316SAndreas Gohr    if(!is_array($d)) $d = array();
15265cc1598SPhy    $d = array_map('hsc',$d);
15347248316SAndreas Gohr
15447248316SAndreas Gohr    if(!isset($d['acl'])) $d['acl']=1;
1553a0852d9SAndreas Gohr    if(!isset($d['pop'])) $d['pop']=1;
15647248316SAndreas Gohr
15747248316SAndreas Gohr    ?>
15847248316SAndreas Gohr    <form action="" method="post">
15947248316SAndreas Gohr    <input type="hidden" name="l" value="<?php echo $LC ?>" />
16047248316SAndreas Gohr    <fieldset>
16147248316SAndreas Gohr        <label for="title"><?php echo $lang['i_wikiname']?>
16247248316SAndreas Gohr        <input type="text" name="d[title]" id="title" value="<?php echo $d['title'] ?>" style="width: 20em;" />
16347248316SAndreas Gohr        </label>
16447248316SAndreas Gohr
16547248316SAndreas Gohr        <fieldset style="margin-top: 1em;">
16647248316SAndreas Gohr            <label for="acl">
16747248316SAndreas Gohr            <input type="checkbox" name="d[acl]" id="acl" <?php echo(($d['acl'] ? ' checked="checked"' : ''));?> />
16847248316SAndreas Gohr            <?php echo $lang['i_enableacl']?></label>
16947248316SAndreas Gohr
17047248316SAndreas Gohr            <fieldset id="acldep">
17147248316SAndreas Gohr                <label for="superuser"><?php echo $lang['i_superuser']?></label>
172*64159a61SAndreas Gohr                <input class="text" type="text" name="d[superuser]" id="superuser"
173*64159a61SAndreas Gohr                       value="<?php echo $d['superuser'] ?>" />
17447248316SAndreas Gohr
17547248316SAndreas Gohr                <label for="fullname"><?php echo $lang['fullname']?></label>
176*64159a61SAndreas Gohr                <input class="text" type="text" name="d[fullname]" id="fullname"
177*64159a61SAndreas Gohr                       value="<?php echo $d['fullname'] ?>" />
17847248316SAndreas Gohr
17947248316SAndreas Gohr                <label for="email"><?php echo $lang['email']?></label>
18047248316SAndreas Gohr                <input class="text" type="text" name="d[email]" id="email" value="<?php echo $d['email'] ?>" />
18147248316SAndreas Gohr
18247248316SAndreas Gohr                <label for="password"><?php echo $lang['pass']?></label>
18347248316SAndreas Gohr                <input class="text" type="password" name="d[password]" id="password" />
18447248316SAndreas Gohr
18547248316SAndreas Gohr                <label for="confirm"><?php echo $lang['passchk']?></label>
18647248316SAndreas Gohr                <input class="text" type="password" name="d[confirm]" id="confirm" />
1878af2e4bbSAndreas Gohr
1888af2e4bbSAndreas Gohr                <label for="policy"><?php echo $lang['i_policy']?></label>
1898af2e4bbSAndreas Gohr                <select class="text" name="d[policy]" id="policy">
190*64159a61SAndreas Gohr                    <option value="0" <?php echo ($d['policy'] == 0)?'selected="selected"':'' ?>><?php
191*64159a61SAndreas Gohr                        echo $lang['i_pol0']?></option>
192*64159a61SAndreas Gohr                    <option value="1" <?php echo ($d['policy'] == 1)?'selected="selected"':'' ?>><?php
193*64159a61SAndreas Gohr                        echo $lang['i_pol1']?></option>
194*64159a61SAndreas Gohr                    <option value="2" <?php echo ($d['policy'] == 2)?'selected="selected"':'' ?>><?php
195*64159a61SAndreas Gohr                        echo $lang['i_pol2']?></option>
1968af2e4bbSAndreas Gohr                </select>
19706361442SAndreas Gohr
198ab9346edSAnika Henke                <label for="allowreg">
199*64159a61SAndreas Gohr                    <input type="checkbox" name="d[allowreg]" id="allowreg" <?php
200*64159a61SAndreas Gohr                        echo(($d['allowreg'] ? ' checked="checked"' : ''));?> />
201ab9346edSAnika Henke                    <?php echo $lang['i_allowreg']?>
20274850f29SAnika Henke                </label>
20347248316SAndreas Gohr            </fieldset>
20447248316SAndreas Gohr        </fieldset>
20547248316SAndreas Gohr
20606361442SAndreas Gohr        <fieldset>
20706361442SAndreas Gohr            <p><?php echo $lang['i_license']?></p>
20806361442SAndreas Gohr            <?php
209b1730bd2STom N Harris            array_push($license,array('name' => $lang['i_license_none'], 'url'=>''));
210ed856534STom N Harris            if(empty($d['license'])) $d['license'] = 'cc-by-sa';
21106361442SAndreas Gohr            foreach($license as $key => $lic){
21206361442SAndreas Gohr                echo '<label for="lic_'.$key.'">';
21365cc1598SPhy                echo '<input type="radio" name="d[license]" value="'.hsc($key).'" id="lic_'.$key.'"'.
214b1730bd2STom N Harris                     (($d['license'] === $key)?' checked="checked"':'').'>';
21565cc1598SPhy                echo hsc($lic['name']);
21606361442SAndreas Gohr                if($lic['url']) echo ' <a href="'.$lic['url'].'" target="_blank"><sup>[?]</sup></a>';
21706361442SAndreas Gohr                echo '</label>';
21806361442SAndreas Gohr            }
21906361442SAndreas Gohr            ?>
22006361442SAndreas Gohr        </fieldset>
22106361442SAndreas Gohr
2223a0852d9SAndreas Gohr        <fieldset>
2233a0852d9SAndreas Gohr            <p><?php echo $lang['i_pop_field']?></p>
2243a0852d9SAndreas Gohr            <label for="pop">
225*64159a61SAndreas Gohr                <input type="checkbox" name="d[pop]" id="pop" <?php
226*64159a61SAndreas Gohr                    echo(($d['pop'] ? ' checked="checked"' : ''));?> />
227*64159a61SAndreas Gohr                <?php echo $lang['i_pop_label']?>
228*64159a61SAndreas Gohr                <a href="http://www.dokuwiki.org/popularity" target="_blank"><sup>[?]</sup></a>
2293a0852d9SAndreas Gohr            </label>
2303a0852d9SAndreas Gohr        </fieldset>
2313a0852d9SAndreas Gohr
23247248316SAndreas Gohr    </fieldset>
23347248316SAndreas Gohr    <fieldset id="process">
234ae614416SAnika Henke        <button type="submit" name="submit"><?php echo $lang['btn_save']?></button>
23547248316SAndreas Gohr    </fieldset>
23647248316SAndreas Gohr    </form>
23747248316SAndreas Gohr    <?php
23847248316SAndreas Gohr}
23947248316SAndreas Gohr
24070a6aa16Schrisfunction print_retry() {
24170a6aa16Schris    global $lang;
2429ad6da3dSAndreas Gohr    global $LC;
24370a6aa16Schris    ?>
24470a6aa16Schris    <form action="" method="get">
24570a6aa16Schris      <fieldset>
2469ad6da3dSAndreas Gohr        <input type="hidden" name="l" value="<?php echo $LC ?>" />
247ae614416SAnika Henke        <button type="submit"><?php echo $lang['i_retry'];?></button>
24870a6aa16Schris      </fieldset>
24970a6aa16Schris    </form>
25070a6aa16Schris    <?php
25170a6aa16Schris}
25270a6aa16Schris
25347248316SAndreas Gohr/**
25447248316SAndreas Gohr * Check validity of data
25547248316SAndreas Gohr *
25647248316SAndreas Gohr * @author Andreas Gohr
257253d4b48SGerrit Uitslag *
258253d4b48SGerrit Uitslag * @param array $d
259253d4b48SGerrit Uitslag * @return bool ok?
26047248316SAndreas Gohr */
261e2386079SAndreas Gohrfunction check_data(&$d){
2624b530faaSTom N Harris    static $form_default = array(
2634b530faaSTom N Harris        'title'     => '',
264ed856534STom N Harris        'acl'       => '1',
2654b530faaSTom N Harris        'superuser' => '',
2664b530faaSTom N Harris        'fullname'  => '',
2674b530faaSTom N Harris        'email'     => '',
2684b530faaSTom N Harris        'password'  => '',
2694b530faaSTom N Harris        'confirm'   => '',
2704b530faaSTom N Harris        'policy'    => '0',
271ab9346edSAnika Henke        'allowreg'  => '0',
2724b530faaSTom N Harris        'license'   => 'cc-by-sa'
2734b530faaSTom N Harris    );
27447248316SAndreas Gohr    global $lang;
27547248316SAndreas Gohr    global $error;
27647248316SAndreas Gohr
2774b530faaSTom N Harris    if(!is_array($d)) $d = array();
2784b530faaSTom N Harris    foreach($d as $k => $v) {
2794b530faaSTom N Harris        if(is_array($v))
2804b530faaSTom N Harris            unset($d[$k]);
2814b530faaSTom N Harris        else
2824b530faaSTom N Harris            $d[$k] = (string)$v;
2834b530faaSTom N Harris    }
284e2386079SAndreas Gohr
2854b530faaSTom N Harris    //autolowercase the username
2864b530faaSTom N Harris    $d['superuser'] = isset($d['superuser']) ? strtolower($d['superuser']) : "";
2874b530faaSTom N Harris
2884b530faaSTom N Harris    $ok = false;
2894b530faaSTom N Harris
2904b530faaSTom N Harris    if(isset($_REQUEST['submit'])) {
29147248316SAndreas Gohr        $ok = true;
29247248316SAndreas Gohr
29347248316SAndreas Gohr        // check input
29447248316SAndreas Gohr        if(empty($d['title'])){
29547248316SAndreas Gohr            $error[] = sprintf($lang['i_badval'],$lang['i_wikiname']);
29647248316SAndreas Gohr            $ok      = false;
29747248316SAndreas Gohr        }
2984b530faaSTom N Harris        if(isset($d['acl'])){
299d60813a2SGina Haeussge            if(!preg_match('/^[a-z0-9_]+$/',$d['superuser'])){
30047248316SAndreas Gohr                $error[] = sprintf($lang['i_badval'],$lang['i_superuser']);
30147248316SAndreas Gohr                $ok      = false;
30247248316SAndreas Gohr            }
30347248316SAndreas Gohr            if(empty($d['password'])){
30447248316SAndreas Gohr                $error[] = sprintf($lang['i_badval'],$lang['pass']);
30547248316SAndreas Gohr                $ok      = false;
30647248316SAndreas Gohr            }
3074b530faaSTom N Harris            elseif(!isset($d['confirm']) || $d['confirm'] != $d['password']){
30847248316SAndreas Gohr                $error[] = sprintf($lang['i_badval'],$lang['passchk']);
30947248316SAndreas Gohr                $ok      = false;
31047248316SAndreas Gohr            }
31147248316SAndreas Gohr            if(empty($d['fullname']) || strstr($d['fullname'],':')){
31247248316SAndreas Gohr                $error[] = sprintf($lang['i_badval'],$lang['fullname']);
31347248316SAndreas Gohr                $ok      = false;
31447248316SAndreas Gohr            }
315e2386079SAndreas Gohr            if(empty($d['email']) || strstr($d['email'],':') || !strstr($d['email'],'@')){
31647248316SAndreas Gohr                $error[] = sprintf($lang['i_badval'],$lang['email']);
31747248316SAndreas Gohr                $ok      = false;
31847248316SAndreas Gohr            }
31947248316SAndreas Gohr        }
3204b530faaSTom N Harris    }
3214b530faaSTom N Harris    $d = array_merge($form_default, $d);
32247248316SAndreas Gohr    return $ok;
32347248316SAndreas Gohr}
32447248316SAndreas Gohr
32547248316SAndreas Gohr/**
32647248316SAndreas Gohr * Writes the data to the config files
32747248316SAndreas Gohr *
32847248316SAndreas Gohr * @author  Chris Smith <chris@jalakai.co.uk>
329253d4b48SGerrit Uitslag *
330253d4b48SGerrit Uitslag * @param array $d
331253d4b48SGerrit Uitslag * @return bool
33247248316SAndreas Gohr */
33347248316SAndreas Gohrfunction store_data($d){
3340036aa89SAndreas Gohr    global $LC;
33547248316SAndreas Gohr    $ok = true;
3368af2e4bbSAndreas Gohr    $d['policy'] = (int) $d['policy'];
33747248316SAndreas Gohr
33847248316SAndreas Gohr    // create local.php
33924650a19SAndreas Gohr    $now    = gmdate('r');
34047248316SAndreas Gohr    $output = <<<EOT
34147248316SAndreas Gohr<?php
34247248316SAndreas Gohr/**
34347248316SAndreas Gohr * Dokuwiki's Main Configuration File - Local Settings
34447248316SAndreas Gohr * Auto-generated by install script
34547248316SAndreas Gohr * Date: $now
34647248316SAndreas Gohr */
34747248316SAndreas Gohr
34847248316SAndreas GohrEOT;
3492613efa1SAndreas Gohr    // add any config options set by a previous installer
3502613efa1SAndreas Gohr    $preset = __DIR__.'/install.conf';
3512613efa1SAndreas Gohr    if(file_exists($preset)){
3522613efa1SAndreas Gohr        $output .= "# preset config options\n";
3532613efa1SAndreas Gohr        $output .= file_get_contents($preset);
3542613efa1SAndreas Gohr        $output .= "\n\n";
3552613efa1SAndreas Gohr        $output .= "# options selected in installer\n";
3562613efa1SAndreas Gohr        @unlink($preset);
3572613efa1SAndreas Gohr    }
3582613efa1SAndreas Gohr
35947248316SAndreas Gohr    $output .= '$conf[\'title\'] = \''.addslashes($d['title'])."';\n";
3600036aa89SAndreas Gohr    $output .= '$conf[\'lang\'] = \''.addslashes($LC)."';\n";
36106361442SAndreas Gohr    $output .= '$conf[\'license\'] = \''.addslashes($d['license'])."';\n";
36247248316SAndreas Gohr    if($d['acl']){
36347248316SAndreas Gohr        $output .= '$conf[\'useacl\'] = 1'.";\n";
364523d7ea6Schris        $output .= "\$conf['superuser'] = '@admin';\n";
36547248316SAndreas Gohr    }
366ab9346edSAnika Henke    if(!$d['allowreg']){
36743c137edSAnika Henke        $output .= '$conf[\'disableactions\'] = \'register\''.";\n";
368d2ea6dc1SAnika Henke    }
36947248316SAndreas Gohr    $ok = $ok && fileWrite(DOKU_LOCAL.'local.php',$output);
37047248316SAndreas Gohr
37147248316SAndreas Gohr    if ($d['acl']) {
3723791b589SAndreas Gohr        // hash the password
3733791b589SAndreas Gohr        $phash = new PassHash();
3743791b589SAndreas Gohr        $pass = $phash->hash_smd5($d['password']);
3753791b589SAndreas Gohr
37647248316SAndreas Gohr        // create users.auth.php
3773791b589SAndreas Gohr        // --- user:SMD5password:Real Name:email:groups,comma,seperated
378d2ea6dc1SAnika Henke        $output = join(":",array($d['superuser'], $pass, $d['fullname'], $d['email'], 'admin,user'));
37947248316SAndreas Gohr        $output = @file_get_contents(DOKU_CONF.'users.auth.php.dist')."\n$output\n";
38047248316SAndreas Gohr        $ok = $ok && fileWrite(DOKU_LOCAL.'users.auth.php', $output);
38147248316SAndreas Gohr
38247248316SAndreas Gohr        // create acl.auth.php
3838af2e4bbSAndreas Gohr        $output = <<<EOT
3848af2e4bbSAndreas Gohr# acl.auth.php
3858af2e4bbSAndreas Gohr# <?php exit()?>
3868af2e4bbSAndreas Gohr# Don't modify the lines above
3878af2e4bbSAndreas Gohr#
3888af2e4bbSAndreas Gohr# Access Control Lists
3898af2e4bbSAndreas Gohr#
3908af2e4bbSAndreas Gohr# Auto-generated by install script
3918af2e4bbSAndreas Gohr# Date: $now
3928af2e4bbSAndreas Gohr
3938af2e4bbSAndreas GohrEOT;
3948af2e4bbSAndreas Gohr        if($d['policy'] == 2){
3958af2e4bbSAndreas Gohr            $output .=  "*               @ALL          0\n";
396d2ea6dc1SAnika Henke            $output .=  "*               @user         8\n";
3979c70688aSchris        }elseif($d['policy'] == 1){
3988af2e4bbSAndreas Gohr            $output .=  "*               @ALL          1\n";
399d2ea6dc1SAnika Henke            $output .=  "*               @user         8\n";
4008af2e4bbSAndreas Gohr        }else{
4018af2e4bbSAndreas Gohr            $output .=  "*               @ALL          8\n";
4028af2e4bbSAndreas Gohr        }
40347248316SAndreas Gohr        $ok = $ok && fileWrite(DOKU_LOCAL.'acl.auth.php', $output);
40447248316SAndreas Gohr    }
4053a0852d9SAndreas Gohr
4063a0852d9SAndreas Gohr    // enable popularity submission
4073a0852d9SAndreas Gohr    if($d['pop']){
4083a0852d9SAndreas Gohr        @touch(DOKU_INC.'data/cache/autosubmit.txt');
4093a0852d9SAndreas Gohr    }
4103a0852d9SAndreas Gohr
411c70d6ceeSAndreas Gohr    // disable auth plugins til needed
412c70d6ceeSAndreas Gohr    $output = <<<EOT
413c70d6ceeSAndreas Gohr<?php
414c70d6ceeSAndreas Gohr/*
415c70d6ceeSAndreas Gohr * Local plugin enable/disable settings
416c70d6ceeSAndreas Gohr *
417c70d6ceeSAndreas Gohr * Auto-generated by install script
418c70d6ceeSAndreas Gohr * Date: $now
419c70d6ceeSAndreas Gohr */
420c70d6ceeSAndreas Gohr
421c70d6ceeSAndreas Gohr\$plugins['authad']    = 0;
422c70d6ceeSAndreas Gohr\$plugins['authldap']  = 0;
423c70d6ceeSAndreas Gohr\$plugins['authmysql'] = 0;
424c70d6ceeSAndreas Gohr\$plugins['authpgsql'] = 0;
425c70d6ceeSAndreas Gohr
426c70d6ceeSAndreas GohrEOT;
427c70d6ceeSAndreas Gohr    $ok = $ok && fileWrite(DOKU_LOCAL.'plugins.local.php', $output);
428c70d6ceeSAndreas Gohr
42947248316SAndreas Gohr    return $ok;
43047248316SAndreas Gohr}
43147248316SAndreas Gohr
43247248316SAndreas Gohr/**
43347248316SAndreas Gohr * Write the given content to a file
43447248316SAndreas Gohr *
43547248316SAndreas Gohr * @author  Chris Smith <chris@jalakai.co.uk>
436253d4b48SGerrit Uitslag *
437253d4b48SGerrit Uitslag * @param string $filename
438253d4b48SGerrit Uitslag * @param string $data
439253d4b48SGerrit Uitslag * @return bool
44047248316SAndreas Gohr */
44147248316SAndreas Gohrfunction fileWrite($filename, $data) {
44247248316SAndreas Gohr    global $error;
44347248316SAndreas Gohr    global $lang;
44447248316SAndreas Gohr
44547248316SAndreas Gohr    if (($fp = @fopen($filename, 'wb')) === false) {
44647248316SAndreas Gohr        $filename = str_replace($_SERVER['DOCUMENT_ROOT'],'{DOCUMENT_ROOT}/', $filename);
44747248316SAndreas Gohr        $error[]  = sprintf($lang['i_writeerr'],$filename);
44847248316SAndreas Gohr        return false;
44947248316SAndreas Gohr    }
45047248316SAndreas Gohr
45147248316SAndreas Gohr    if (!empty($data)) { fwrite($fp, $data);  }
45247248316SAndreas Gohr    fclose($fp);
45347248316SAndreas Gohr    return true;
45447248316SAndreas Gohr}
45547248316SAndreas Gohr
45647248316SAndreas Gohr
45747248316SAndreas Gohr/**
45847248316SAndreas Gohr * check installation dependent local config files and tests for a known
45947248316SAndreas Gohr * unmodified main config file
46047248316SAndreas Gohr *
46147248316SAndreas Gohr * @author      Chris Smith <chris@jalakai.co.uk>
462253d4b48SGerrit Uitslag *
463253d4b48SGerrit Uitslag * @return bool
46447248316SAndreas Gohr */
46547248316SAndreas Gohrfunction check_configs(){
46647248316SAndreas Gohr    global $error;
46747248316SAndreas Gohr    global $lang;
46847248316SAndreas Gohr
46947248316SAndreas Gohr    $ok = true;
47047248316SAndreas Gohr
4715cfb8815Schris    $config_files = array(
4725cfb8815Schris        'local' => DOKU_LOCAL.'local.php',
4735cfb8815Schris        'users' => DOKU_LOCAL.'users.auth.php',
4745cfb8815Schris        'auth'  => DOKU_LOCAL.'acl.auth.php'
4755cfb8815Schris    );
4765cfb8815Schris
47747248316SAndreas Gohr    // configs shouldn't exist
47847248316SAndreas Gohr    foreach ($config_files as $file) {
47979e79377SAndreas Gohr        if (file_exists($file) && filesize($file)) {
48047248316SAndreas Gohr            $file    = str_replace($_SERVER['DOCUMENT_ROOT'],'{DOCUMENT_ROOT}/', $file);
48147248316SAndreas Gohr            $error[] = sprintf($lang['i_confexists'],$file);
48247248316SAndreas Gohr            $ok      = false;
48347248316SAndreas Gohr        }
48447248316SAndreas Gohr    }
48547248316SAndreas Gohr    return $ok;
48647248316SAndreas Gohr}
48747248316SAndreas Gohr
48847248316SAndreas Gohr
48947248316SAndreas Gohr/**
49047248316SAndreas Gohr * Check other installation dir/file permission requirements
49147248316SAndreas Gohr *
49247248316SAndreas Gohr * @author      Chris Smith <chris@jalakai.co.uk>
493253d4b48SGerrit Uitslag *
494253d4b48SGerrit Uitslag * @return bool
49547248316SAndreas Gohr */
49647248316SAndreas Gohrfunction check_permissions(){
49747248316SAndreas Gohr    global $error;
49847248316SAndreas Gohr    global $lang;
49947248316SAndreas Gohr
50047248316SAndreas Gohr    $dirs = array(
50147248316SAndreas Gohr        'conf'        => DOKU_LOCAL,
50247248316SAndreas Gohr        'data'        => DOKU_INC.'data',
50347248316SAndreas Gohr        'pages'       => DOKU_INC.'data/pages',
50447248316SAndreas Gohr        'attic'       => DOKU_INC.'data/attic',
50547248316SAndreas Gohr        'media'       => DOKU_INC.'data/media',
50649b78edaSAndreas Gohr        'media_attic' => DOKU_INC.'data/media_attic',
50749b78edaSAndreas Gohr        'media_meta'  => DOKU_INC.'data/media_meta',
50847248316SAndreas Gohr        'meta'        => DOKU_INC.'data/meta',
50947248316SAndreas Gohr        'cache'       => DOKU_INC.'data/cache',
51047248316SAndreas Gohr        'locks'       => DOKU_INC.'data/locks',
5119711045aSAndreas Gohr        'index'       => DOKU_INC.'data/index',
512de33a58fSMichael Klier        'tmp'         => DOKU_INC.'data/tmp'
51347248316SAndreas Gohr    );
51447248316SAndreas Gohr
51547248316SAndreas Gohr    $ok = true;
51647248316SAndreas Gohr    foreach($dirs as $dir){
51779e79377SAndreas Gohr        if(!file_exists("$dir/.") || !is_writable($dir)){
51870a6aa16Schris            $dir     = str_replace($_SERVER['DOCUMENT_ROOT'],'{DOCUMENT_ROOT}', $dir);
51947248316SAndreas Gohr            $error[] = sprintf($lang['i_permfail'],$dir);
52047248316SAndreas Gohr            $ok      = false;
52147248316SAndreas Gohr        }
52247248316SAndreas Gohr    }
52347248316SAndreas Gohr    return $ok;
52447248316SAndreas Gohr}
52547248316SAndreas Gohr
52647248316SAndreas Gohr/**
5273afe5d1cSAndreas Gohr * Check the availability of functions used in DokuWiki and the PHP version
52847248316SAndreas Gohr *
52947248316SAndreas Gohr * @author Andreas Gohr <andi@splitbrain.org>
530253d4b48SGerrit Uitslag *
531253d4b48SGerrit Uitslag * @return bool
53247248316SAndreas Gohr */
53347248316SAndreas Gohrfunction check_functions(){
53447248316SAndreas Gohr    global $error;
53547248316SAndreas Gohr    global $lang;
5363afe5d1cSAndreas Gohr    $ok = true;
5373afe5d1cSAndreas Gohr
5383476bb81SAndreas Gohr    if(version_compare(phpversion(),'5.6.0','<')){
5393476bb81SAndreas Gohr        $error[] = sprintf($lang['i_phpver'],phpversion(),'5.6.0');
5403afe5d1cSAndreas Gohr        $ok = false;
5413afe5d1cSAndreas Gohr    }
5423afe5d1cSAndreas Gohr
5437f413440SAndreas Gohr    if(ini_get('mbstring.func_overload') != 0){
5447f413440SAndreas Gohr        $error[] = $lang['i_mbfuncoverload'];
5457f413440SAndreas Gohr        $ok = false;
5467f413440SAndreas Gohr    }
5477f413440SAndreas Gohr
5483009a773SAndreas Gohr    $funcs = explode(' ','addslashes call_user_func chmod copy fgets '.
54947248316SAndreas Gohr                         'file file_exists fseek flush filesize ftell fopen '.
55047248316SAndreas Gohr                         'glob header ignore_user_abort ini_get mail mkdir '.
55147248316SAndreas Gohr                         'ob_start opendir parse_ini_file readfile realpath '.
552bab4a8bdSAndreas Gohr                         'rename rmdir serialize session_start unlink usleep '.
553d1d99bb9SAndreas Gohr                         'preg_replace file_get_contents htmlspecialchars_decode '.
554ab38a322Slupo49                         'spl_autoload_register stream_select fsockopen pack');
55547248316SAndreas Gohr
55670a6aa16Schris    if (!function_exists('mb_substr')) {
55770a6aa16Schris        $funcs[] = 'utf8_encode';
55870a6aa16Schris        $funcs[] = 'utf8_decode';
55970a6aa16Schris    }
56070a6aa16Schris
56147248316SAndreas Gohr    foreach($funcs as $func){
56247248316SAndreas Gohr        if(!function_exists($func)){
56347248316SAndreas Gohr            $error[] = sprintf($lang['i_funcna'],$func);
56447248316SAndreas Gohr            $ok = false;
56547248316SAndreas Gohr        }
56647248316SAndreas Gohr    }
56747248316SAndreas Gohr    return $ok;
56847248316SAndreas Gohr}
56947248316SAndreas Gohr
57047248316SAndreas Gohr/**
57147248316SAndreas Gohr * Print language selection
57247248316SAndreas Gohr *
57347248316SAndreas Gohr * @author Andreas Gohr <andi@splitbrain.org>
57447248316SAndreas Gohr */
57547248316SAndreas Gohrfunction langsel(){
57647248316SAndreas Gohr    global $lang;
57747248316SAndreas Gohr    global $LC;
57847248316SAndreas Gohr
57947248316SAndreas Gohr    $dir = DOKU_INC.'inc/lang';
58047248316SAndreas Gohr    $dh  = opendir($dir);
58147248316SAndreas Gohr    if(!$dh) return;
58247248316SAndreas Gohr
58347248316SAndreas Gohr    $langs = array();
58447248316SAndreas Gohr    while (($file = readdir($dh)) !== false) {
58547248316SAndreas Gohr        if(preg_match('/^[\._]/',$file)) continue;
58679e79377SAndreas Gohr        if(is_dir($dir.'/'.$file) && file_exists($dir.'/'.$file.'/lang.php')){
58747248316SAndreas Gohr            $langs[] = $file;
58847248316SAndreas Gohr        }
58947248316SAndreas Gohr    }
59047248316SAndreas Gohr    closedir($dh);
59147248316SAndreas Gohr    sort($langs);
59247248316SAndreas Gohr
59347248316SAndreas Gohr    echo '<form action="">';
59447248316SAndreas Gohr    echo $lang['i_chooselang'];
59547248316SAndreas Gohr    echo ': <select name="l" onchange="submit()">';
59647248316SAndreas Gohr    foreach($langs as $l){
59747248316SAndreas Gohr        $sel = ($l == $LC) ? 'selected="selected"' : '';
59847248316SAndreas Gohr        echo '<option value="'.$l.'" '.$sel.'>'.$l.'</option>';
59947248316SAndreas Gohr    }
60047248316SAndreas Gohr    echo '</select> ';
601ae614416SAnika Henke    echo '<button type="submit">'.$lang['btn_update'].'</button>';
60247248316SAndreas Gohr    echo '</form>';
60347248316SAndreas Gohr}
60447248316SAndreas Gohr
60547248316SAndreas Gohr/**
606c66972f2SAdrian Lang * Print global error array
60747248316SAndreas Gohr *
60847248316SAndreas Gohr * @author Andreas Gohr <andi@splitbrain.org>
60947248316SAndreas Gohr */
61047248316SAndreas Gohrfunction print_errors(){
61147248316SAndreas Gohr    global $error;
6124b530faaSTom N Harris    if(!empty($error)) {
61347248316SAndreas Gohr        echo '<ul>';
61447248316SAndreas Gohr        foreach ($error as $err){
61547248316SAndreas Gohr            echo "<li>$err</li>";
61647248316SAndreas Gohr        }
61747248316SAndreas Gohr        echo '</ul>';
61847248316SAndreas Gohr    }
6194b530faaSTom N Harris}
620