Dotclear

source: admin/install/index.php @ 1535:5878d21ef9b9

Revision 1535:5878d21ef9b9, 13.9 KB checked in by Lepeltier kévin, 12 years ago (diff)

ticket #1406
Déplacement du message d'erreur du dossier cache pendant la phase d'installation
Vers le Dashboard.
Ajout d'un message d'erreur concernant le dossier public, sur le Dashboard.
Deux phrases ajouté pour la traduction.
"Cache directory %s does not exist."
"Directory %s is not writable."

RevLine 
[0]1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
[1179]6# Copyright (c) 2003-2013 Olivier Meunier & Association Dotclear
[0]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     $rc_path = $_SERVER['DC_RC_PATH'];
15} elseif (isset($_SERVER['REDIRECT_DC_RC_PATH'])) {
16     $rc_path = $_SERVER['REDIRECT_DC_RC_PATH'];
17} else {
18     $rc_path = dirname(__FILE__).'/../../inc/config.php';
19}
20
21require dirname(__FILE__).'/../../inc/prepend.php';
22require dirname(__FILE__).'/check.php';
23
24$can_install = true;
25$err = '';
26
27# Loading locales for detected language
28$dlang = http::getAcceptLanguage();
29if ($dlang != 'en')
30{
31     l10n::init();
32     l10n::set(dirname(__FILE__).'/../../locales/'.$dlang.'/date');
33     l10n::set(dirname(__FILE__).'/../../locales/'.$dlang.'/main');
[3]34     l10n::set(dirname(__FILE__).'/../../locales/'.$dlang.'/plugins');
[0]35}
36
37if (!defined('DC_MASTER_KEY') || DC_MASTER_KEY == '') {
38     $can_install = false;
39     $err = '<p>'.__('Please set a master key (DC_MASTER_KEY) in configuration file.').'</p>';
40}
41
42# Check if dotclear is already installed
43$schema = dbSchema::init($core->con);
44if (in_array($core->prefix.'post',$schema->getTables())) {
45     $can_install = false;
46     $err = '<p>'.__('Dotclear is already installed.').'</p>';
47}
48
49# Check system capabilites
50if (!dcSystemCheck($core->con,$_e)) {
51     $can_install = false;
52     $err = '<p>'.__('Dotclear cannot be installed.').'</p><ul><li>'.implode('</li><li>',$_e).'</li></ul>';
53}
54
55# Get information and perform install
56$u_email = $u_firstname = $u_name = $u_login = $u_pwd = '';
57$mail_sent = false;
58if ($can_install && !empty($_POST))
59{
60     $u_email = !empty($_POST['u_email']) ? $_POST['u_email'] : null;
61     $u_firstname = !empty($_POST['u_firstname']) ? $_POST['u_firstname'] : null;
62     $u_name = !empty($_POST['u_name']) ? $_POST['u_name'] : null;
63     $u_login = !empty($_POST['u_login']) ? $_POST['u_login'] : null;
64     $u_pwd = !empty($_POST['u_pwd']) ? $_POST['u_pwd'] : null;
65     $u_pwd2 = !empty($_POST['u_pwd2']) ? $_POST['u_pwd2'] : null;
66     
67     try
68     {
69          # Check user information
70          if (empty($u_login)) {
71               throw new Exception(__('No user ID given'));
72          }
73          if (!preg_match('/^[A-Za-z0-9@._-]{2,}$/',$u_login)) {
74               throw new Exception(__('User ID must contain at least 2 characters using letters, numbers or symbols.'));
75          }
76          if ($u_email && !text::isEmail($u_email)) {
77               throw new Exception(__('Invalid email address'));
78          }
79         
80          if (empty($u_pwd)) {
81               throw new Exception(__('No password given'));
82          }
83          if ($u_pwd != $u_pwd2) {
84               throw new Exception(__("Passwords don't match"));
85          }
86          if (strlen($u_pwd) < 6) {
87               throw new Exception(__('Password must contain at least 6 characters.'));
88          }
89         
90          # Try to guess timezone
91          $default_tz = 'Europe/London';
92          if (!empty($_POST['u_date']) && function_exists('timezone_open'))
93          {
94               if (preg_match('/\((.+)\)$/',$_POST['u_date'],$_tz)) {
95                    $_tz = $_tz[1];
96                    $_tz = @timezone_open($_tz);
97                    if ($_tz instanceof DateTimeZone) {
98                         $_tz = @timezone_name_get($_tz);
99                         if ($_tz) {
100                              $default_tz = $_tz;
101                         }
102                    }
103                    unset($_tz);
104               }
105          }
106         
107          # Create schema
108          $_s = new dbStruct($core->con,$core->prefix);
109          require dirname(__FILE__).'/../../inc/dbschema/db-schema.php';
110         
111          $si = new dbStruct($core->con,$core->prefix);
112          $changes = $si->synchronize($_s);
113         
114          # Create user
115          $cur = $core->con->openCursor($core->prefix.'user');
116          $cur->user_id = $u_login;
117          $cur->user_super = 1;
118          $cur->user_pwd = crypt::hmac(DC_MASTER_KEY,$u_pwd);
119          $cur->user_name = (string) $u_name;
120          $cur->user_firstname = (string) $u_firstname;
121          $cur->user_email = (string) $u_email;
122          $cur->user_lang = $dlang;
123          $cur->user_tz = $default_tz;
124          $cur->user_creadt = date('Y-m-d H:i:s');
125          $cur->user_upddt = date('Y-m-d H:i:s');
126          $cur->user_options = serialize($core->userDefaults());
127          $cur->insert();
128         
129          $core->auth->checkUser($u_login);
130         
131          $admin_url = preg_replace('%install/index.php$%','',$_SERVER['REQUEST_URI']);
132          $root_url = preg_replace('%/admin/install/index.php$%','',$_SERVER['REQUEST_URI']);
133         
134          # Create blog
135          $cur = $core->con->openCursor($core->prefix.'blog');
136          $cur->blog_id = 'default';
137          $cur->blog_url = http::getHost().$root_url.'/index.php?';
138          $cur->blog_name = __('My first blog');
139          $core->addBlog($cur);
140          $core->blogDefaults($cur->blog_id);
141         
142          $blog_settings = new dcSettings($core,'default');
143          $blog_settings->addNamespace('system');
144          $blog_settings->system->put('blog_timezone',$default_tz);
145          $blog_settings->system->put('lang',$dlang);
146          $blog_settings->system->put('public_url',$root_url.'/public');
147          $blog_settings->system->put('themes_url',$root_url.'/themes');
148          $blog_settings->system->put('date_format',__('%A, %B %e %Y'));
149         
150          # Add Dotclear version
151          $cur = $core->con->openCursor($core->prefix.'version');
152          $cur->module = 'core';
153          $cur->version = (string) DC_VERSION;
154          $cur->insert();
155         
156          # Create first post
157          $core->setBlog('default');
158         
159          $cur = $core->con->openCursor($core->prefix.'post');
160          $cur->user_id = $u_login;
161          $cur->post_format = 'xhtml';
162          $cur->post_lang = $dlang;
163          $cur->post_title = __('Welcome to Dotclear!');
164          $cur->post_content = '<p>'.__('This is your first entry. When you\'re ready '.
165               'to blog, log in to edit or delete it.').'</p>';
166          $cur->post_content_xhtml = $cur->post_content;
167          $cur->post_status = 1;
168          $cur->post_open_comment = 1;
169          $cur->post_open_tb = 0;
170          $post_id = $core->blog->addPost($cur);
171         
172          # Add a comment to it
173          $cur = $core->con->openCursor($core->prefix.'comment');
174          $cur->post_id = $post_id;
175          $cur->comment_tz = $default_tz;
176          $cur->comment_author = __('Dotclear Team');
177          $cur->comment_email = 'contact@dotclear.net';
178          $cur->comment_site = 'http://www.dotclear.org/';
179          $cur->comment_content = __("<p>This is a comment.</p>\n<p>To delete it, log in and ".
180               "view your blog's comments. Then you might remove or edit it.</p>");
181          $core->blog->addComment($cur);
182         
183          #  Plugins initialization
184          define('DC_CONTEXT_ADMIN',true);
185          $core->plugins->loadModules(DC_PLUGINS_ROOT);
186          $plugins_install = $core->plugins->installModules();
187         
[13]188          # Add dashboard module options
189          $core->auth->user_prefs->addWorkspace('dashboard');
190          $core->auth->user_prefs->dashboard->put('doclinks',true,'boolean','',null,true);
191          $core->auth->user_prefs->dashboard->put('dcnews',true,'boolean','',null,true);
[1247]192          $core->auth->user_prefs->dashboard->put('quickentry',false,'boolean','',null,true);
[240]193
194          # Add accessibility options
195          $core->auth->user_prefs->addWorkspace('accessibility');
196          $core->auth->user_prefs->accessibility->put('nodragdrop',false,'boolean','',null,true);
197
198          # Add user interface options
199          $core->auth->user_prefs->addWorkspace('interface');
[1178]200          $core->auth->user_prefs->interface->put('enhanceduploader',true,'boolean','',null,true);
[240]201
[3]202          # Add default favorites
203          $core->auth->user_prefs->addWorkspace('favorites');
204
205          $init_fav = array();
206         
[467]207          $init_fav['new_post'] = array('new_post','New entry','post.php',
[3]208               'images/menu/edit.png','images/menu/edit-b.png',
209               'usage,contentadmin',null,'menu-new-post');
[467]210          $init_fav['posts'] = array('posts','Entries','posts.php',
[3]211               'images/menu/entries.png','images/menu/entries-b.png',
212               'usage,contentadmin',null,null);
[467]213          $init_fav['comments'] = array('comments','Comments','comments.php',
[3]214               'images/menu/comments.png','images/menu/comments-b.png',
215               'usage,contentadmin',null,null);
[467]216          $init_fav['prefs'] = array('prefs','My preferences','preferences.php',
[3]217               'images/menu/user-pref.png','images/menu/user-pref-b.png',
218               '*',null,null);
[467]219          $init_fav['blog_pref'] = array('blog_pref','Blog settings','blog_pref.php',
[3]220               'images/menu/blog-pref.png','images/menu/blog-pref-b.png',
221               'admin',null,null);
[467]222          $init_fav['blog_theme'] = array('blog_theme','Blog appearance','blog_theme.php',
[3]223               'images/menu/themes.png','images/menu/blog-theme-b.png',
224               'admin',null,null);
225
[467]226          $init_fav['pages'] = array('pages','Pages','plugin.php?p=pages',
[3]227               'index.php?pf=pages/icon.png','index.php?pf=pages/icon-big.png',
228               'contentadmin,pages',null,null);
[467]229          $init_fav['blogroll'] = array('blogroll','Blogroll','plugin.php?p=blogroll',
[3]230               'index.php?pf=blogroll/icon-small.png','index.php?pf=blogroll/icon.png',
231               'usage,contentadmin',null,null);
232
233          $count = 0;
234          foreach ($init_fav as $k => $f) {
235               $t = array('name' => $f[0],'title' => $f[1],'url' => $f[2], 'small-icon' => $f[3],
236                    'large-icon' => $f[4],'permissions' => $f[5],'id' => $f[6],'class' => $f[7]);
237               $core->auth->user_prefs->favorites->put(sprintf("g%03s",$count),serialize($t),'string',null,true,true);
238               $count++;
239          }
240         
[0]241          $step = 1;
242     }
243     catch (Exception $e)
244     {
245          $err = $e->getMessage();
246     }
247}
248
249if (!isset($step)) {
250     $step = 0;
251}
252header('Content-Type: text/html; charset=UTF-8');
253?>
254<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
255<html xmlns="http://www.w3.org/1999/xhtml"
256xml:lang="en" lang="en">
257<head>
258  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
259  <meta http-equiv="Content-Script-Type" content="text/javascript" />
260  <meta http-equiv="Content-Style-Type" content="text/css" />
261  <meta http-equiv="Content-Language" content="en" />
262  <meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />
263  <meta name="GOOGLEBOT" content="NOSNIPPET" />
264  <title><?php echo __('Dotclear Install'); ?></title>
265 
[473]266     <link rel="stylesheet" href="../style/install.css" type="text/css" media="screen" />
267
[0]268  <script type="text/javascript" src="../js/jquery/jquery.js"></script>
269  <script type="text/javascript">
270  //<![CDATA[
271  $(function() {
272    var login_re = new RegExp('[^A-Za-z0-9@._-]+','g');
273    $('#u_firstname').keyup(function() {
274      var login = this.value.toLowerCase().replace(login_re,'').substring(0,32);
275      $('#u_login').val(login);
276    });
277    $('#u_login').keyup(function() {
278      $(this).val(this.value.replace(login_re,''));
279    });
280   
281    $('#u_login').parent().after($('<input type="hidden" name="u_date" value="' + Date().toLocaleString() + '" />'));
282   
283    var password_link = $('<a href="#" id="obfus"><?php echo(__('show')); ?></a>').click(function() {
284               $('#password').show();
285               $(this).remove();
286               return false;
287          });
288    $('#password').hide().before(password_link);
289  });
290  //]]>
291  </script>
292</head>
293
294<body id="dotclear-admin" class="install">
295<div id="content">
296<?php
297echo
298'<h1>'.__('Dotclear installation').'</h1>'.
299'<div id="main">';
300
301if ($can_install && !empty($err)) {
302     echo '<div class="error"><p><strong>'.__('Errors:').'</strong></p>'.$err.'</div>';
303}
304
305if (!empty($_GET['wiz'])) {
306     echo '<p class="message">'.__('Configuration file has been successfully created.').'</p>';
307}
308
309if ($can_install && $step == 0)
310{
311     echo
312     '<h2>'.__('User information').'</h2>'.
313     
314     '<p>'.__('Please provide the following information needed to create the first user.').'</p>'.
315     
316     '<form action="index.php" method="post">'.
317     '<fieldset><legend>'.__('User information').'</legend>'.
[267]318     '<p><label for="u_firstname">'.__('First Name:').' '.
[0]319     form::field('u_firstname',30,255,html::escapeHTML($u_firstname)).'</label></p>'.
[267]320     '<p><label for="u_name">'.__('Last Name:').' '.
[0]321     form::field('u_name',30,255,html::escapeHTML($u_name)).'</label></p>'.
[267]322     '<p><label for="u_email">'.__('Email:').' '.
[0]323     form::field('u_email',30,255,html::escapeHTML($u_email)).'</label></p>'.
324     '</fieldset>'.
325     
326     '<fieldset><legend>'.__('Username and password').'</legend>'.
[267]327     '<p><label for="u_login" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Username:').' '.
[0]328     form::field('u_login',30,32,html::escapeHTML($u_login)).'</label></p>'.
[267]329     '<p><label for="u_pwd" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Password:').' '.
[0]330     form::password('u_pwd',30,255).'</label></p>'.
[267]331     '<p><label for="u_pwd2" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Confirm password:').' '.
[0]332     form::password('u_pwd2',30,255).'</label></p>'.
333     '</fieldset>'.
334     
[557]335     '<p><input type="submit" value="'.__('Save').'" /></p>'.
[0]336     '</form>';
337}
338elseif ($can_install && $step == 1)
339{
340     # Plugins install messages
341     $plugins_install_result = '';
342     if (!empty($plugins_install['success']))
343     {
344          $plugins_install_result .= '<div class="static-msg">'.__('Following plugins have been installed:').'<ul>';
345          foreach ($plugins_install['success'] as $k => $v) {
346               $plugins_install_result .= '<li>'.$k.'</li>';
347          }
348          $plugins_install_result .= '</ul></div>';
349     }
350     if (!empty($plugins_install['failure']))
351     {
352          $plugins_install_result .= '<div class="error">'.__('Following plugins have not been installed:').'<ul>';
353          foreach ($plugins_install['failure'] as $k => $v) {
354               $plugins_install_result .= '<li>'.$k.' ('.$v.')</li>';
355          }
356          $plugins_install_result .= '</ul></div>';
357     }
358     
359     echo
360     '<h2>'.__('All done!').'</h2>'.
361     
362     $plugins_install_result.
363     
364     '<p>'.__('Dotclear has been successfully installed. Here is some useful information you should keep.').'</p>'.
365     
366     '<h3>'.__('Your account').'</h3>'.
367     '<ul>'.
368     '<li>'.__('Username:').' <strong>'.html::escapeHTML($u_login).'</strong></li>'.
369     '<li>'.__('Password:').' <strong id="password">'.html::escapeHTML($u_pwd).'</strong></li>'.
370     '</ul>'.
371     
372     '<h3>'.__('Your blog').'</h3>'.
373     '<ul>'.
374     '<li>'.__('Blog address:').' <strong>'.html::escapeHTML(http::getHost().$root_url).'/index.php?</strong></li>'.
375     '<li>'.__('Administration interface:').' <strong>'.html::escapeHTML(http::getHost().$admin_url).'</strong></li>'.
376     '</ul>'.
377     
378     '<form action="../auth.php" method="post">'.
379     '<p><input type="submit" value="'.__('Manage your blog now').'" />'.
380     form::hidden(array('user_id'),html::escapeHTML($u_login)).
381     form::hidden(array('user_pwd'),html::escapeHTML($u_pwd)).
382     '</p>'.
383     '</form>';
384}
385elseif (!$can_install)
386{
387     echo '<h2>'.__('Installation can not be completed').'</h2>'.
388     '<div class="error"><p><strong>'.__('Errors:').'</strong></p>'.$err.'</div>'.
389     '<p>'.__('For the said reasons, Dotclear can not be installed. '.
390          'Please refer to <a href="http://dotclear.org/documentation/2.0/admin/install">'.
391          'the documentation</a> to learn how to correct the problem.').'</p>';
392}
393?>
394</div>
395</div>
396</body>
397</html>
Note: See TracBrowser for help on using the repository browser.

Sites map