Dotclear

source: admin/install/wizard.php @ 3565:7b120898d2bd

Revision 3565:7b120898d2bd, 8.3 KB checked in by franck <carnet.franck.paul@…>, 8 years ago (diff)

Add MySQL UTF8-MB4 support

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
7# Licensed under the GPL version 2.0 license.
8# See LICENSE file or
9# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
10#
11# -- END LICENSE BLOCK -----------------------------------------
12
13if (isset($_SERVER['DC_RC_PATH'])) {
14     define('DC_RC_PATH',$_SERVER['DC_RC_PATH']);
15} elseif (isset($_SERVER['REDIRECT_DC_RC_PATH'])) {
16     define('DC_RC_PATH',$_SERVER['REDIRECT_DC_RC_PATH']);
17} else {
18     define('DC_RC_PATH',dirname(__FILE__).'/../../inc/config.php');
19}
20
21#  ClearBricks and DotClear classes auto-loader
22if (@is_dir('/usr/lib/clearbricks')) {
23     define('CLEARBRICKS_PATH','/usr/lib/clearbricks');
24} elseif (is_dir(dirname(__FILE__).'/../../inc/libs/clearbricks')) {
25     define('CLEARBRICKS_PATH',dirname(__FILE__).'/../../inc/libs/clearbricks');
26} elseif (isset($_SERVER['CLEARBRICKS_PATH']) && is_dir($_SERVER['CLEARBRICKS_PATH'])) {
27     define('CLEARBRICKS_PATH',$_SERVER['CLEARBRICKS_PATH']);
28}
29
30if (!defined('CLEARBRICKS_PATH') || !is_dir(CLEARBRICKS_PATH)) {
31     exit('No clearbricks path defined');
32}
33
34require CLEARBRICKS_PATH.'/_common.php';
35
36# Loading locales for detected language
37$dlang = http::getAcceptLanguage();
38if ($dlang != 'en')
39{
40     l10n::init($dlang);
41     l10n::set(dirname(__FILE__).'/../../locales/'.$dlang.'/main');
42}
43
44if (is_file(DC_RC_PATH)) {
45     http::redirect('index.php');
46}
47
48if (!is_writable(dirname(DC_RC_PATH))) {
49     $err = '<p>'.sprintf(__('Path <strong>%s</strong> is not writable.'),path::real(dirname(DC_RC_PATH))).'</p>'.
50     '<p>'.__('Dotclear installation wizard could not create configuration file for you. '.
51          'You must change folder right or create the <strong>config.php</strong> '.
52          'file manually, please refer to '.
53          '<a href="http://dotclear.org/documentation/2.0/admin/install">'.
54          'the documentation</a> to learn how to do this.').'</p>';
55}
56
57$DBDRIVER = !empty($_POST['DBDRIVER']) ? $_POST['DBDRIVER'] : (function_exists('mysqli_connect') ? 'mysqli' : 'mysql');
58$DBHOST = !empty($_POST['DBHOST']) ? $_POST['DBHOST'] : '';
59$DBNAME = !empty($_POST['DBNAME']) ? $_POST['DBNAME'] : '';
60$DBUSER = !empty($_POST['DBUSER']) ? $_POST['DBUSER'] : '';
61$DBPASSWORD = !empty($_POST['DBPASSWORD']) ? $_POST['DBPASSWORD'] : '';
62$DBPREFIX = !empty($_POST['DBPREFIX']) ? $_POST['DBPREFIX'] : 'dc_';
63$ADMINMAILFROM = !empty($_POST['ADMINMAILFROM']) ? $_POST['ADMINMAILFROM'] : '';
64
65if (!empty($_POST))
66{
67     try
68     {
69          if ($DBDRIVER == 'sqlite') {
70               if (strpos($DBNAME, '/') === false) {
71                    $sqlite_db_directory = dirname(DC_RC_PATH).'/../db/';
72                    files::makeDir($sqlite_db_directory,true);
73
74                    # Can we write sqlite_db_directory ?
75                    if (!is_writable($sqlite_db_directory)) {
76                         throw new Exception(sprintf(__('Cannot write "%s" directory.'),path::real($sqlite_db_directory,false)));
77                    }
78                    $DBNAME = $sqlite_db_directory.$DBNAME;
79               }
80          }
81
82          # Tries to connect to database
83          try {
84               $con = dbLayer::init($DBDRIVER,$DBHOST,$DBNAME,$DBUSER,$DBPASSWORD);
85          } catch (Exception $e) {
86               throw new Exception('<p>' . __($e->getMessage()) . '</p>');
87          }
88
89          # Checks system capabilites
90          require dirname(__FILE__).'/check.php';
91          if (!dcSystemCheck($con,$_e)) {
92               $can_install = false;
93               throw new Exception('<p>'.__('Dotclear cannot be installed.').'</p><ul><li>'.implode('</li><li>',$_e).'</li></ul>');
94          }
95
96          # Check if dotclear is already installed
97          $schema = dbSchema::init($con);
98          if (in_array($DBPREFIX.'version',$schema->getTables())) {
99               throw new Exception(__('Dotclear is already installed.'));
100          }
101          # Check master email
102          if (!text::isEmail($ADMINMAILFROM)) {
103               throw new Exception(__('Master email is not valid.'));
104          }
105
106          # Does config.php.in exist?
107          $config_in = dirname(__FILE__).'/../../inc/config.php.in';
108          if (!is_file($config_in)) {
109               throw new Exception(sprintf(__('File %s does not exist.'),$config_in));
110          }
111
112          # Can we write config.php
113          if (!is_writable(dirname(DC_RC_PATH))) {
114               throw new Exception(sprintf(__('Cannot write %s file.'),DC_RC_PATH));
115          }
116
117          # Creates config.php file
118          $full_conf = file_get_contents($config_in);
119
120          writeConfigValue('DC_DBDRIVER',$DBDRIVER,$full_conf);
121          writeConfigValue('DC_DBHOST',$DBHOST,$full_conf);
122          writeConfigValue('DC_DBUSER',$DBUSER,$full_conf);
123          writeConfigValue('DC_DBPASSWORD',$DBPASSWORD,$full_conf);
124          writeConfigValue('DC_DBNAME',$DBNAME,$full_conf);
125          writeConfigValue('DC_DBPREFIX',$DBPREFIX,$full_conf);
126
127          $admin_url = preg_replace('%install/wizard.php$%','',$_SERVER['REQUEST_URI']);
128          writeConfigValue('DC_ADMIN_URL',http::getHost().$admin_url,$full_conf);
129          $admin_email = !empty($ADMINMAILFROM) ? $ADMINMAILFROM : 'dotclear@'.$_SERVER['HTTP_HOST'];
130          writeConfigValue('DC_ADMIN_MAILFROM',$admin_email,$full_conf);
131          writeConfigValue('DC_MASTER_KEY',md5(uniqid()),$full_conf);
132
133          $fp = @fopen(DC_RC_PATH,'wb');
134          if ($fp === false) {
135               throw new Exception(sprintf(__('Cannot write %s file.'),DC_RC_PATH));
136          }
137          fwrite($fp,$full_conf);
138          fclose($fp);
139          chmod(DC_RC_PATH, 0666);
140
141          $con->close();
142          http::redirect('index.php?wiz=1');
143     }
144     catch (Exception $e)
145     {
146          $err = $e->getMessage();
147     }
148}
149
150function writeConfigValue($name,$val,&$str)
151{
152     $val = str_replace("'","\'",$val);
153     $str = preg_replace('/(\''.$name.'\')(.*?)$/ms','$1,\''.$val.'\');',$str);
154}
155
156header('Content-Type: text/html; charset=UTF-8');
157
158// Prevents Clickjacking as far as possible
159header('X-Frame-Options: SAMEORIGIN'); // FF 3.6.9+ Chrome 4.1+ IE 8+ Safari 4+ Opera 10.5+
160
161?>
162<!DOCTYPE html>
163<html lang="en">
164<head>
165  <meta charset="UTF-8" />
166  <meta http-equiv="Content-Script-Type" content="text/javascript" />
167  <meta http-equiv="Content-Style-Type" content="text/css" />
168  <meta http-equiv="Content-Language" content="en" />
169  <meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />
170  <meta name="GOOGLEBOT" content="NOSNIPPET" />
171  <title><?php echo __('Dotclear installation wizard'); ?></title>
172     <link rel="stylesheet" href="../style/install.css" type="text/css" media="screen" />
173</head>
174
175<body id="dotclear-admin" class="install">
176<div id="content">
177<?php
178echo
179'<h1>'.__('Dotclear installation wizard').'</h1>'.
180'<div id="main">';
181
182if (!empty($err)) {
183     echo '<div class="error" role="alert"><p><strong>'.__('Errors:').'</strong></p>'.$err.'</div>';
184} else {
185     echo '<h2>'.__('Welcome').'</h2>'.
186          '<p>'.__('To complete your Dotclear installation and start writing on your blog, '.
187               'we just need to know how to access your database and who you are. '.
188               'Just fill this two steps wizard with this information and we will be done.').'</p>'.
189          '<p class="message"><strong>'.__('Attention:').'</strong> '.
190          __('this wizard may not function on every host. If it does not work for you, '.
191               'please refer to <a href="http://dotclear.org/documentation/2.0/admin/install">'.
192               'the documentation</a> to learn how to create the <strong>config.php</strong> '.
193               'file manually.').'</p>';
194}
195
196echo
197'<h2>'.__('System information').'</h2>'.
198
199'<p>'.__('Please provide the following information needed to create your configuration file.').'</p>'.
200
201'<form action="wizard.php" method="post">'.
202'<p><label class="required" for="DBDRIVER"><abbr title="'.__('Required field').'">*</abbr> '.__('Database type:').'</label> '.
203    form::combo('DBDRIVER',array(__('MySQL (deprecated)')=>'mysql',__('MySQLi')=>'mysqli',__('MySQLi (full UTF-8)')=>'mysqlimb4',__('PostgreSQL')=>'pgsql',__('SQLite')=>'sqlite'),$DBDRIVER).'</p>'.
204'<p><label for="DBHOST">'.__('Database Host Name:').'</label> '.
205form::field('DBHOST',30,255,html::escapeHTML($DBHOST)).'</p>'.
206'<p><label for="DBNAME">'.__('Database Name:').'</label> '.
207form::field('DBNAME',30,255,html::escapeHTML($DBNAME)).'</p>'.
208'<p><label for="DBUSER">'.__('Database User Name:').'</label> '.
209form::field('DBUSER',30,255,html::escapeHTML($DBUSER)).'</p>'.
210'<p><label for="DBPASSWORD">'.__('Database Password:').'</label> '.
211form::password('DBPASSWORD',30,255).'</p>'.
212'<p><label for="DBPREFIX" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Database Tables Prefix:').'</label> '.
213form::field('DBPREFIX',30,255,html::escapeHTML($DBPREFIX)).'</p>'.
214'<p><label for="ADMINMAILFROM">'.__('Master Email: (used as sender for password recovery)').'</label> '.
215form::field('ADMINMAILFROM',30,255,html::escapeHTML($ADMINMAILFROM)).'</p>'.
216
217'<p><input type="submit" value="'.__('Continue').'" /></p>'.
218'</form>';
219?>
220</div>
221</div>
222</body>
223</html>
Note: See TracBrowser for help on using the repository browser.

Sites map