Dotclear

source: admin/install/index.php @ 13:c7a0f4cc3aab

Revision 13:c7a0f4cc3aab, 13.7 KB checked in by franckpaul, 14 years ago (diff)

Mise en place des options d'affichage des modules du dashboard
Fix de la gestion des préférences utilisateur (onglets User profile et User options)

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2010 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     $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');
34     l10n::set(dirname(__FILE__).'/../../locales/'.$dlang.'/plugins');
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         
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);
192          $core->auth->user_prefs->dashboard->put('quickentry',true,'boolean','',null,true);
193         
194          # Add default favorites
195          $core->auth->user_prefs->addWorkspace('favorites');
196
197          $init_fav = array();
198         
199          $init_fav['new_post'] = array('new_post',__('New entry'),'post.php',
200               'images/menu/edit.png','images/menu/edit-b.png',
201               'usage,contentadmin',null,'menu-new-post');
202          $init_fav['posts'] = array('posts',__('Entries'),'posts.php',
203               'images/menu/entries.png','images/menu/entries-b.png',
204               'usage,contentadmin',null,null);
205          $init_fav['comments'] = array('comments',__('Comments'),'comments.php',
206               'images/menu/comments.png','images/menu/comments-b.png',
207               'usage,contentadmin',null,null);
208          $init_fav['prefs'] = array('prefs',__('My preferences'),'preferences.php',
209               'images/menu/user-pref.png','images/menu/user-pref-b.png',
210               '*',null,null);
211          $init_fav['blog_pref'] = array('blog_pref',__('Blog settings'),'blog_pref.php',
212               'images/menu/blog-pref.png','images/menu/blog-pref-b.png',
213               'admin',null,null);
214          $init_fav['blog_theme'] = array('blog_theme',__('Blog appearance'),'blog_theme.php',
215               'images/menu/themes.png','images/menu/blog-theme-b.png',
216               'admin',null,null);
217
218          $init_fav['pages'] = array('pages',__('Pages'),'plugin.php?p=pages',
219               'index.php?pf=pages/icon.png','index.php?pf=pages/icon-big.png',
220               'contentadmin,pages',null,null);
221          $init_fav['blogroll'] = array('blogroll',__('Blogroll'),'plugin.php?p=blogroll',
222               'index.php?pf=blogroll/icon-small.png','index.php?pf=blogroll/icon.png',
223               'usage,contentadmin',null,null);
224
225          $count = 0;
226          foreach ($init_fav as $k => $f) {
227               $t = array('name' => $f[0],'title' => $f[1],'url' => $f[2], 'small-icon' => $f[3],
228                    'large-icon' => $f[4],'permissions' => $f[5],'id' => $f[6],'class' => $f[7]);
229               $core->auth->user_prefs->favorites->put(sprintf("g%03s",$count),serialize($t),'string',null,true,true);
230               $count++;
231          }
232         
233          $step = 1;
234     }
235     catch (Exception $e)
236     {
237          $err = $e->getMessage();
238     }
239}
240
241if (!isset($step)) {
242     $step = 0;
243}
244header('Content-Type: text/html; charset=UTF-8');
245?>
246<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
247<html xmlns="http://www.w3.org/1999/xhtml"
248xml:lang="en" lang="en">
249<head>
250  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
251  <meta http-equiv="Content-Script-Type" content="text/javascript" />
252  <meta http-equiv="Content-Style-Type" content="text/css" />
253  <meta http-equiv="Content-Language" content="en" />
254  <meta name="MSSmartTagsPreventParsing" content="TRUE" />
255  <meta name="ROBOTS" content="NOARCHIVE,NOINDEX,NOFOLLOW" />
256  <meta name="GOOGLEBOT" content="NOSNIPPET" />
257  <title><?php echo __('Dotclear Install'); ?></title>
258 
259  <style type="text/css">
260  @import url(../style/install.css);
261  </style>
262  <script type="text/javascript" src="../js/jquery/jquery.js"></script>
263  <script type="text/javascript">
264  //<![CDATA[
265  $(function() {
266    var login_re = new RegExp('[^A-Za-z0-9@._-]+','g');
267    $('#u_firstname').keyup(function() {
268      var login = this.value.toLowerCase().replace(login_re,'').substring(0,32);
269      $('#u_login').val(login);
270    });
271    $('#u_login').keyup(function() {
272      $(this).val(this.value.replace(login_re,''));
273    });
274   
275    $('#u_login').parent().after($('<input type="hidden" name="u_date" value="' + Date().toLocaleString() + '" />'));
276   
277    var password_link = $('<a href="#" id="obfus"><?php echo(__('show')); ?></a>').click(function() {
278               $('#password').show();
279               $(this).remove();
280               return false;
281          });
282    $('#password').hide().before(password_link);
283  });
284  //]]>
285  </script>
286</head>
287
288<body id="dotclear-admin" class="install">
289<div id="content">
290<?php
291echo
292'<h1>'.__('Dotclear installation').'</h1>'.
293'<div id="main">';
294
295if (!is_writable(DC_TPL_CACHE)) {
296     echo '<div class="error"><p>'.sprintf(__('Cache directory %s is not writable.'),DC_TPL_CACHE).'</p></div>';
297}
298
299if ($can_install && !empty($err)) {
300     echo '<div class="error"><p><strong>'.__('Errors:').'</strong></p>'.$err.'</div>';
301}
302
303if (!empty($_GET['wiz'])) {
304     echo '<p class="message">'.__('Configuration file has been successfully created.').'</p>';
305}
306
307if ($can_install && $step == 0)
308{
309     echo
310     '<h2>'.__('User information').'</h2>'.
311     
312     '<p>'.__('Please provide the following information needed to create the first user.').'</p>'.
313     
314     '<form action="index.php" method="post">'.
315     '<fieldset><legend>'.__('User information').'</legend>'.
316     '<p><label>'.__('First Name:').' '.
317     form::field('u_firstname',30,255,html::escapeHTML($u_firstname)).'</label></p>'.
318     '<p><label>'.__('Last Name:').' '.
319     form::field('u_name',30,255,html::escapeHTML($u_name)).'</label></p>'.
320     '<p><label>'.__('Email:').' '.
321     form::field('u_email',30,255,html::escapeHTML($u_email)).'</label></p>'.
322     '</fieldset>'.
323     
324     '<fieldset><legend>'.__('Username and password').'</legend>'.
325     '<p><label class="required" title="'.__('Required field').'">'.__('Username:').' '.
326     form::field('u_login',30,32,html::escapeHTML($u_login)).'</label></p>'.
327     '<p><label class="required" title="'.__('Required field').'">'.__('Password:').' '.
328     form::password('u_pwd',30,255).'</label></p>'.
329     '<p><label class="required" title="'.__('Required field').'">'.__('Confirm password:').' '.
330     form::password('u_pwd2',30,255).'</label></p>'.
331     '</fieldset>'.
332     
333     '<p><input type="submit" value="'.__('save').'" /></p>'.
334     '</form>';
335}
336elseif ($can_install && $step == 1)
337{
338     # Plugins install messages
339     $plugins_install_result = '';
340     if (!empty($plugins_install['success']))
341     {
342          $plugins_install_result .= '<div class="static-msg">'.__('Following plugins have been installed:').'<ul>';
343          foreach ($plugins_install['success'] as $k => $v) {
344               $plugins_install_result .= '<li>'.$k.'</li>';
345          }
346          $plugins_install_result .= '</ul></div>';
347     }
348     if (!empty($plugins_install['failure']))
349     {
350          $plugins_install_result .= '<div class="error">'.__('Following plugins have not been installed:').'<ul>';
351          foreach ($plugins_install['failure'] as $k => $v) {
352               $plugins_install_result .= '<li>'.$k.' ('.$v.')</li>';
353          }
354          $plugins_install_result .= '</ul></div>';
355     }
356     
357     echo
358     '<h2>'.__('All done!').'</h2>'.
359     
360     $plugins_install_result.
361     
362     '<p>'.__('Dotclear has been successfully installed. Here is some useful information you should keep.').'</p>'.
363     
364     '<h3>'.__('Your account').'</h3>'.
365     '<ul>'.
366     '<li>'.__('Username:').' <strong>'.html::escapeHTML($u_login).'</strong></li>'.
367     '<li>'.__('Password:').' <strong id="password">'.html::escapeHTML($u_pwd).'</strong></li>'.
368     '</ul>'.
369     
370     '<h3>'.__('Your blog').'</h3>'.
371     '<ul>'.
372     '<li>'.__('Blog address:').' <strong>'.html::escapeHTML(http::getHost().$root_url).'/index.php?</strong></li>'.
373     '<li>'.__('Administration interface:').' <strong>'.html::escapeHTML(http::getHost().$admin_url).'</strong></li>'.
374     '</ul>'.
375     
376     '<form action="../auth.php" method="post">'.
377     '<p><input type="submit" value="'.__('Manage your blog now').'" />'.
378     form::hidden(array('user_id'),html::escapeHTML($u_login)).
379     form::hidden(array('user_pwd'),html::escapeHTML($u_pwd)).
380     '</p>'.
381     '</form>';
382}
383elseif (!$can_install)
384{
385     echo '<h2>'.__('Installation can not be completed').'</h2>'.
386     '<div class="error"><p><strong>'.__('Errors:').'</strong></p>'.$err.'</div>'.
387     '<p>'.__('For the said reasons, Dotclear can not be installed. '.
388          'Please refer to <a href="http://dotclear.org/documentation/2.0/admin/install">'.
389          'the documentation</a> to learn how to correct the problem.').'</p>';
390}
391?>
392</div>
393</div>
394</body>
395</html>
Note: See TracBrowser for help on using the repository browser.

Sites map