Dotclear

source: admin/preferences.php @ 13:c7a0f4cc3aab

Revision 13:c7a0f4cc3aab, 15.9 KB checked in by franckpaul, 13 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
13require dirname(__FILE__).'/../inc/admin/prepend.php';
14
15dcPage::check('usage,contentadmin');
16
17$page_title = __('My preferences');
18
19$user_name = $core->auth->getInfo('user_name');
20$user_firstname = $core->auth->getInfo('user_firstname');
21$user_displayname = $core->auth->getInfo('user_displayname');
22$user_email = $core->auth->getInfo('user_email');
23$user_url = $core->auth->getInfo('user_url');
24$user_lang = $core->auth->getInfo('user_lang');
25$user_tz = $core->auth->getInfo('user_tz');
26$user_post_status = $core->auth->getInfo('user_post_status');
27
28$user_options = $core->auth->getOptions();
29
30$core->auth->user_prefs->addWorkspace('dashboard');
31$user_dm_doclinks = $core->auth->user_prefs->dashboard->doclinks;
32$user_dm_dcnews = $core->auth->user_prefs->dashboard->dcnews;
33$user_dm_quickentry = $core->auth->user_prefs->dashboard->quickentry;
34
35$default_tab = 'user-profile';
36
37if (!empty($_GET['append']) || !empty($_GET['removed']) || !empty($_GET['neworder'])) {
38     $default_tab = 'user-favorites';
39} elseif (!empty($_GET['updated'])) {
40     $default_tab = 'user-options';
41}
42
43foreach ($core->getFormaters() as $v) {
44     $formaters_combo[$v] = $v;
45}
46
47foreach ($core->blog->getAllPostStatus() as $k => $v) {
48     $status_combo[$v] = $k;
49}
50
51# Language codes
52$langs = l10n::getISOcodes(1,1);
53foreach ($langs as $k => $v) {
54     $lang_avail = $v == 'en' || is_dir(DC_L10N_ROOT.'/'.$v);
55     $lang_combo[] = new formSelectOption($k,$v,$lang_avail ? 'avail10n' : '');
56}
57
58# Add or update user
59if (isset($_POST['user_name']))
60{
61     try
62     {
63          $pwd_check = !empty($_POST['cur_pwd']) && $core->auth->checkPassword(crypt::hmac(DC_MASTER_KEY,$_POST['cur_pwd']));
64         
65          if ($core->auth->allowPassChange() && !$pwd_check && $user_email != $_POST['user_email']) {
66               throw new Exception(__('If you want to change your email or password you must provide your current password.'));
67          }
68         
69          $cur = $core->con->openCursor($core->prefix.'user');
70         
71          $cur->user_name = $user_name = $_POST['user_name'];
72          $cur->user_firstname = $user_firstname = $_POST['user_firstname'];
73          $cur->user_displayname = $user_displayname = $_POST['user_displayname'];
74          $cur->user_email = $user_email = $_POST['user_email'];
75          $cur->user_url = $user_url = $_POST['user_url'];
76          $cur->user_lang = $user_lang = $_POST['user_lang'];
77          $cur->user_tz = $user_tz = $_POST['user_tz'];
78
79          $cur->user_options = new ArrayObject($user_options);
80         
81          if ($core->auth->allowPassChange() && !empty($_POST['new_pwd']))
82          {
83               if (!$pwd_check) {
84                    throw new Exception(__('If you want to change your email or password you must provide your current password.'));
85               }
86               
87               if ($_POST['new_pwd'] != $_POST['new_pwd_c']) {
88                    throw new Exception(__("Passwords don't match"));
89               }
90               
91               $cur->user_pwd = $_POST['new_pwd'];
92          }
93         
94          # --BEHAVIOR-- adminBeforeUserUpdate
95          $core->callBehavior('adminBeforeUserProfileUpdate',$cur,$core->auth->userID());
96         
97          # Udate user
98          $core->updUser($core->auth->userID(),$cur);
99         
100          # --BEHAVIOR-- adminAfterUserUpdate
101          $core->callBehavior('adminAfterUserProfileUpdate',$cur,$core->auth->userID());
102         
103          http::redirect('preferences.php?upd=1');
104     }
105     catch (Exception $e)
106     {
107          $core->error->add($e->getMessage());
108     }
109}
110
111# Update user options
112if (isset($_POST['user_post_format'])) {
113     try
114     {
115          $cur = $core->con->openCursor($core->prefix.'user');
116         
117          $cur->user_name = $user_name;
118          $cur->user_firstname = $user_firstname;
119          $cur->user_displayname = $user_displayname;
120          $cur->user_email = $user_email;
121          $cur->user_url = $user_url;
122          $cur->user_lang = $user_lang;
123          $cur->user_tz = $user_tz;
124
125          $cur->user_post_status = $user_post_status = $_POST['user_post_status'];
126         
127          $user_options['edit_size'] = (integer) $_POST['user_edit_size'];
128          if ($user_options['edit_size'] < 1) {
129               $user_options['edit_size'] = 10;
130          }
131          $user_options['post_format'] = $_POST['user_post_format'];
132          $user_options['enable_wysiwyg'] = !empty($_POST['user_wysiwyg']);
133         
134          $cur->user_options = new ArrayObject($user_options);
135         
136          # --BEHAVIOR-- adminBeforeUserUpdate
137          $core->callBehavior('adminBeforeUserUpdate',$cur,$core->auth->userID());
138         
139          # Update user prefs
140          $core->auth->user_prefs->dashboard->put('doclinks',!empty($_POST['user_dm_doclinks']),'boolean');
141          $core->auth->user_prefs->dashboard->put('dcnews',!empty($_POST['user_dm_dcnews']),'boolean');
142          $core->auth->user_prefs->dashboard->put('quickentry',!empty($_POST['user_dm_quickentry']),'boolean');
143         
144          # Udate user
145          $core->updUser($core->auth->userID(),$cur);
146         
147          # --BEHAVIOR-- adminAfterUserUpdate
148          $core->callBehavior('adminAfterUserUpdate',$cur,$core->auth->userID());
149         
150          http::redirect('preferences.php?updated=1');
151     }
152     catch (Exception $e)
153     {
154          $core->error->add($e->getMessage());
155     }
156}
157
158# Add selected favorites
159if (!empty($_POST['appendaction']) && !empty($_POST['append'])) {
160     $ws = $core->auth->user_prefs->addWorkspace('favorites');
161     $user_favs = $ws->DumpLocalPrefs();
162     $count = count($user_favs);
163     foreach ($_POST['append'] as $k => $v)
164     {
165          try {
166               $found = false;
167               foreach ($user_favs as $f) {
168                    $f = unserialize($f['value']);
169                    if ($f['name'] == $v) {
170                         $found = true;
171                         break;
172                    }
173               }
174               if (!$found) {
175                    $uid = sprintf("u%03s",$count);
176                    $fav = array('name' => $_fav[$v][0],'title' => $_fav[$v][1],'url' => $_fav[$v][2],'small-icon' => $_fav[$v][3],
177                         'large-icon' => $_fav[$v][4],'permissions' => $_fav[$v][5],'id' => $_fav[$v][6],'class' => $_fav[$v][7]);
178                    $core->auth->user_prefs->favorites->put($uid,serialize($fav),'string');
179                    $count++;
180               }
181          } catch (Exception $e) {
182               $core->error->add($e->getMessage());
183               break;
184          }
185     }
186     
187     if (!$core->error->flag()) {
188          http::redirect('preferences.php?append=1');
189     }
190}
191
192# Delete selected favorites
193if (!empty($_POST['removeaction']) && !empty($_POST['remove'])) {
194     $ws = $core->auth->user_prefs->addWorkspace('favorites');
195     foreach ($_POST['remove'] as $k => $v)
196     {
197          try {
198               $core->auth->user_prefs->favorites->drop($v);
199          } catch (Exception $e) {
200               $core->error->add($e->getMessage());
201               break;
202          }
203     }
204     // Update pref_id values
205     try {
206          $user_favs = $ws->DumpLocalPrefs();
207          foreach ($user_favs as $k => $v)
208          {
209               $core->auth->user_prefs->favorites->drop($k);
210          }
211          $count = 0;
212          foreach ($user_favs as $k => $v)
213          {
214               $uid = sprintf("u%03s",$count);
215               $f = unserialize($v['value']);
216               $fav = array('name' => $f['name'],'title' => $f['title'],'url' => $f['url'],'small-icon' => $f['small-icon'],
217                    'large-icon' => $f['large-icon'],'permissions' => $f['permissions'],'id' => $f['id'],'class' => $f['class']);
218               $core->auth->user_prefs->favorites->put($uid,serialize($fav),'string');
219               $count++;
220          }
221     } catch (Exception $e) {
222          $core->error->add($e->getMessage());
223     }
224     
225     if (!$core->error->flag()) {
226          http::redirect('preferences.php?removed=1');
227     }
228}
229
230# Order favs
231$order = array();
232if (empty($_POST['favs_order']) && !empty($_POST['order'])) {
233     $order = $_POST['order'];
234     asort($order);
235     $order = array_keys($order);
236} elseif (!empty($_POST['favs_order'])) {
237     $order = explode(',',$_POST['favs_order']);
238}
239
240if (!empty($_POST['saveorder']) && !empty($order))
241{
242     try {
243          $user_favs = $ws->DumpLocalPrefs();
244          foreach ($user_favs as $k => $v)
245          {
246               $core->auth->user_prefs->favorites->drop($k);
247          }
248          $count = 0;
249          foreach ($order as $i => $k) {
250               $uid = sprintf("u%03s",$count);
251               $f = unserialize($user_favs[$k]['value']);
252               $fav = array('name' => $f['name'],'title' => $f['title'],'url' => $f['url'],'small-icon' => $f['small-icon'],
253                    'large-icon' => $f['large-icon'],'permissions' => $f['permissions'],'id' => $f['id'],'class' => $f['class']);
254               $core->auth->user_prefs->favorites->put($uid,serialize($fav),'string');
255               $count++;
256          }
257     } catch (Exception $e) {
258          $core->error->add($e->getMessage());
259     }
260
261     if (!$core->error->flag()) {
262          http::redirect('preferences.php?&neworder=1');
263     }
264}
265
266
267/* DISPLAY
268-------------------------------------------------------- */
269dcPage::open($page_title,
270     dcPage::jsLoad('js/_preferences.js').
271     dcPage::jsPageTabs($default_tab).
272     dcPage::jsConfirmClose('user-form').
273     
274     # --BEHAVIOR-- adminPreferencesHeaders
275     $core->callBehavior('adminPreferencesHeaders')
276);
277
278if (!empty($_GET['upd'])) {
279          echo '<p class="message">'.__('Personal information has been successfully updated.').'</p>';
280}
281if (!empty($_GET['updated'])) {
282          echo '<p class="message">'.__('Personal options has been successfully updated.').'</p>';
283}
284if (!empty($_GET['append'])) {
285          echo '<p class="message">'.__('Favorites have been successfully added.').'</p>';
286}
287if (!empty($_GET['neworder'])) {
288     echo '<p class="message">'.__('Favorites has been successfully updated.').'</p>';
289}
290if (!empty($_GET['removed'])) {
291          echo '<p class="message">'.__('Favorites have been successfully removed.').'</p>';
292}
293
294echo '<h2>'.$page_title.'</h2>';
295
296# User profile
297echo '<div class="multi-part" id="user-profile" title="'.__('My profile').'">';
298
299echo
300'<form action="preferences.php" method="post" id="user-form">'.
301'<fieldset><legend>'.__('My profile').'</legend>'.
302'<div class="two-cols">'.
303'<div class="col">'.
304'<p><label for="user_name">'.__('Last Name:').
305form::field('user_name',20,255,html::escapeHTML($user_name),'',2).'</label></p>'.
306
307'<p><label for="user_firstname">'.__('First Name:').
308form::field('user_firstname',20,255,html::escapeHTML($user_firstname),'',3).'</label></p>'.
309
310'<p><label for="user_displayname">'.__('Display name:').
311form::field('user_displayname',20,255,html::escapeHTML($user_displayname),'',4).'</label></p>'.
312
313'<p><label for="user_email">'.__('Email:').
314form::field('user_email',20,255,html::escapeHTML($user_email),'',5).'</label></p>'.
315
316'<p><label for="user_url">'.__('URL:').
317form::field('user_url',30,255,html::escapeHTML($user_url),'',6).'</label></p>'.
318
319'</div>'.
320
321'<div class="col">'.
322
323'<p><label for="user_lang">'.__('User language:').
324form::combo('user_lang',$lang_combo,$user_lang,'l10n',10).'</label></p>'.
325
326'<p><label for="user_tz">'.__('User timezone:').
327form::combo('user_tz',dt::getZones(true,true),$user_tz,'',11).'</label></p>'.
328
329'</div>'.
330'</div>'.
331'<br class="clear" />'. //Opera sucks
332'</fieldset>';
333
334if ($core->auth->allowPassChange())
335{
336     echo
337     '<fieldset>'.
338     '<legend>'.__('Change your password').'</legend>'.
339     
340     '<p><label for="new_pwd">'.__('New password:').
341     form::password('new_pwd',20,255,'','',30).'</label></p>'.
342     
343     '<p><label for="new_pwd_c">'.__('Confirm password:').
344     form::password('new_pwd_c',20,255,'','',31).'</label></p>'.
345     '</fieldset>'.
346     
347     '<fieldset>'.
348     '<p>'.__('If you want to change your email or password you must provide your current password.').'</p>'.
349     '<p><label for="cur_pwd">'.__('Your password:').
350     form::password('cur_pwd',20,255,'','',32).'</label></p>'.
351     '</fieldset>';
352}
353
354echo
355'<p class="clear">'.
356$core->formNonce().
357'<input type="submit" accesskey="s" value="'.__('Save').'" tabindex="33" /></p>'.
358'</form>';
359
360echo '</div>';
361
362# User options : some from actual user profile, dashboard modules, ...
363echo '<div class="multi-part" id="user-options" title="'.__('My options').'">';
364
365echo
366'<form action="preferences.php" method="post" id="user-options">'.
367'<fieldset><legend>'.__('My options').'</legend>'.
368
369'<p><label for="user_post_format">'.__('Preferred format:').
370form::combo('user_post_format',$formaters_combo,$user_options['post_format'],'',7).'</label></p>'.
371
372'<p><label for="user_post_status">'.__('Default entry status:').
373form::combo('user_post_status',$status_combo,$user_post_status,'',8).'</label></p>'.
374
375'<p><label for="user_edit_size">'.__('Entry edit field height:').
376form::field('user_edit_size',5,4,(integer) $user_options['edit_size'],'',9).'</label></p>'.
377
378'<p><label for="user_wysiwyg" class="classic">'.
379form::checkbox('user_wysiwyg',1,$user_options['enable_wysiwyg'],'',12).' '.
380__('Enable WYSIWYG mode').'</label></p>'.
381'<br class="clear" />'. //Opera sucks
382'</fieldset>';
383
384echo
385'<fieldset><legend>'.__('Dashboard modules').'</legend>'.
386
387'<p><label for="user_dm_doclinks" class="classic">'.
388form::checkbox('user_dm_doclinks',1,$user_dm_doclinks,'',13).' '.
389__('Display documentation links').'</label></p>'.
390
391'<p><label for="user_dm_dcnews" class="classic">'.
392form::checkbox('user_dm_dcnews',1,$user_dm_dcnews,'',14).' '.
393__('Display Dotclear news').'</label></p>'.
394
395'<p><label for="user_dm_quickentry" class="classic">'.
396form::checkbox('user_dm_quickentry',1,$user_dm_quickentry,'',15).' '.
397__('Display quick entry form').'</label></p>'.
398
399'<br class="clear" />'. //Opera sucks
400'</fieldset>';
401
402# --BEHAVIOR-- adminPreferencesForm
403$core->callBehavior('adminPreferencesForm',$core);
404
405echo
406'<p class="clear">'.
407$core->formNonce().
408'<input type="submit" accesskey="s" value="'.__('Save').'" tabindex="33" /></p>'.
409'</form>';
410
411echo '</div>';
412
413# User favorites
414echo '<div class="multi-part" id="user-favorites" title="'.__('My favorites').'">';
415$ws = $core->auth->user_prefs->addWorkspace('favorites');
416echo '<form action="preferences.php" method="post" id="favs-form">';
417echo '<div class="two-cols">';
418echo '<div class="col70">';
419echo '<fieldset id="my-favs"><legend>'.__('My favorites').'</legend>';
420echo '<p>'.__('Modify numbers in fields to change favorites order.').'</p>';
421$count = 0;
422foreach ($ws->dumpPrefs() as $k => $v) {
423     // User favorites only
424     if (!$v['global']) {
425          $fav = unserialize($v['value']);
426          if (($fav['permissions'] == '*') || $core->auth->check($fav['permissions'],$core->blog->id)) {
427               if ($count == 0) echo '<ul>';
428               $count++;
429               echo '<li id="fu-'.$k.'">'.
430                    '<img src="'.$fav['large-icon'].'" alt="" /> '.
431                    form::field(array('order['.$k.']'),2,3,$count,'position','',false,'title="position de '.$fav['title'].'"').
432                    '<label for="fuk-'.$k.'">'.form::checkbox(array('remove[]','fuk-'.$k),$k).$fav['title'].'</label>'.
433                    '</li>';
434          }
435     }
436}
437if ($count > 0) echo '</ul>';
438if ($count > 0) {
439     echo
440     '<div class="clear">'.
441     '<p class="col">'.form::hidden('favs_order','').
442     $core->formNonce().
443     '<input type="submit" name="saveorder" value="'.__('Save order').'"></p>'.
444     
445     '<p class="right"><input type="submit" class="delete" name="removeaction"'.
446     'value="'.__('Delete selected favorites').'" '.
447     'onclick="return window.confirm(\''.html::escapeJS(
448          __('Are you sure you want to remove selected favorites?')).'\');" /></p>'.
449     '</div>';
450} else {
451     echo
452     '<p>'.__('Currently no personal favorites.').'</p>';
453}
454
455echo '</fieldset>';
456
457echo '<div id="default-favs"><h3>'.__('Default favorites').'</h3>';
458echo '<p class="form-note clear">'.__('Those favorites are displayed when My Favorites list is empty.').'</p>';
459$count = 0;
460foreach ($ws->dumpPrefs() as $k => $v) {
461     // Global favorites only
462     if ($v['global']) {
463          $fav = unserialize($v['value']);
464          if (($fav['permissions'] == '*') || $core->auth->check($fav['permissions'],$core->blog->id)) {
465               if ($count == 0) echo '<ul class="fav-list">';
466               $count++;
467               echo '<li id="fd-'.$k.'">'.
468               '<img src="'.$fav['small-icon'].'" alt="" /> '.$fav['title'].'</li>';
469          }
470     }
471}   
472if ($count > 0) echo '</ul>';
473echo '</div>';
474echo '</div>';
475echo '<div class="col30" id="available-favs">';
476# Available favorites
477echo '<fieldset><legend>'.__('Available favorites').'</legend>';
478$count = 0;
479$array = $_fav;
480function cmp($a,$b) {
481    if ($a[1] == $b[1]) {
482        return 0;
483    }
484    return ($a[1] < $b[1]) ? -1 : 1;
485}
486$array->uasort('cmp');
487foreach ($array as $k => $fav) {
488     if (($fav[5] == '*') || $core->auth->check($fav[5],$core->blog->id)) {
489          if ($count == 0) echo '<ul class="fav-list">';
490          $count++;
491          echo '<li id="fa-'.$fav[0].'">'.'<label for="fak-'.$fav[0].'">'.
492               form::checkbox(array('append[]','fak-'.$fav[0]),$k).
493               '<img src="'.$fav[3].'" alt="" /> '.'<span class="zoom"><img src="'.$fav[4].'" alt="" /></span>'.$fav[1].
494               '</label>'.'</li>';
495     }
496}   
497if ($count > 0) echo '</ul>';
498echo
499'<p>'.
500$core->formNonce().
501'<input type="submit" name="appendaction" value="'.__('Add to my favorites').'"></p>';
502echo '</div>';
503echo '</div>'; # Two-cols
504echo '</form>';
505echo '</div>'; # user-favorites
506
507dcPage::helpBlock('core_user_pref');
508dcPage::close();
509?>
Note: See TracBrowser for help on using the repository browser.

Sites map