Dotclear

source: admin/preferences.php @ 3699:77a12236e993

Revision 3699:77a12236e993, 31.4 KB checked in by franck <carnet.franck.paul@…>, 7 years ago (diff)

Add autocomplete attribute to form::password where it's relevant, code formatting (PSR-2)

Line 
1<?php
2# -- BEGIN LICENSE BLOCK ---------------------------------------
3#
4# This file is part of Dotclear 2.
5#
6# Copyright (c) 2003-2014 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();
29if (empty($user_options['editor']) || !is_array($user_options['editor'])) {
30    $user_options['editor'] = array();
31}
32
33$core->auth->user_prefs->addWorkspace('dashboard');
34$user_dm_doclinks   = $core->auth->user_prefs->dashboard->doclinks;
35$user_dm_dcnews     = $core->auth->user_prefs->dashboard->dcnews;
36$user_dm_quickentry = $core->auth->user_prefs->dashboard->quickentry;
37$user_dm_nofavicons = $core->auth->user_prefs->dashboard->nofavicons;
38if ($core->auth->isSuperAdmin()) {
39    $user_dm_nodcupdate = $core->auth->user_prefs->dashboard->nodcupdate;
40}
41
42$core->auth->user_prefs->addWorkspace('accessibility');
43$user_acc_nodragdrop = $core->auth->user_prefs->accessibility->nodragdrop;
44
45$core->auth->user_prefs->addWorkspace('interface');
46$user_ui_enhanceduploader = $core->auth->user_prefs->interface->enhanceduploader;
47$user_ui_hidemoreinfo     = $core->auth->user_prefs->interface->hidemoreinfo;
48$user_ui_hidehelpbutton   = $core->auth->user_prefs->interface->hidehelpbutton;
49$user_ui_showajaxloader   = $core->auth->user_prefs->interface->showajaxloader;
50$user_ui_htmlfontsize     = $core->auth->user_prefs->interface->htmlfontsize;
51$user_ui_dynfontsize      = $core->auth->user_prefs->interface->dynfontsize;
52if ($core->auth->isSuperAdmin()) {
53    $user_ui_hide_std_favicon = $core->auth->user_prefs->interface->hide_std_favicon;
54}
55$user_ui_iconset            = @$core->auth->user_prefs->interface->iconset;
56$user_ui_nofavmenu          = $core->auth->user_prefs->interface->nofavmenu;
57$user_ui_media_by_page      = ($core->auth->user_prefs->interface->media_by_page ?: 30);
58$user_ui_media_nb_last_dirs = $core->auth->user_prefs->interface->media_nb_last_dirs;
59
60$default_tab = !empty($_GET['tab']) ? html::escapeHTML($_GET['tab']) : 'user-profile';
61
62if (!empty($_GET['append']) || !empty($_GET['removed']) || !empty($_GET['neworder']) ||
63    !empty($_GET['replaced']) || !empty($_POST['appendaction']) || !empty($_POST['removeaction']) ||
64    !empty($_GET['db-updated'])) {
65    $default_tab = 'user-favorites';
66} elseif (!empty($_GET['updated'])) {
67    $default_tab = 'user-options';
68}
69if (($default_tab != 'user-profile') && ($default_tab != 'user-options') && ($default_tab != 'user-favorites')) {
70    $default_tab = 'user-profile';
71}
72
73# Editors combo
74$editors_combo = dcAdminCombos::getEditorsCombo();
75$editors       = array_keys($editors_combo);
76
77# Format by editors
78$formaters         = $core->getFormaters();
79$format_by_editors = array();
80foreach ($formaters as $editor => $formats) {
81    foreach ($formats as $format) {
82        $format_by_editors[$format][$editor] = $editor;
83    }
84}
85$available_formats = array('' => '');
86foreach (array_keys($format_by_editors) as $format) {
87    $available_formats[$format] = $format;
88    if (!isset($user_options['editor'][$format])) {
89        $user_options['editor'][$format] = '';
90    }
91}
92$status_combo = dcAdminCombos::getPostStatusescombo();
93
94$iconsets_combo = array(__('Default') => '');
95$iconsets_root  = dirname(__FILE__) . '/images/iconset/';
96if (is_dir($iconsets_root) && is_readable($iconsets_root)) {
97    if (($d = @dir($iconsets_root)) !== false) {
98        while (($entry = $d->read()) !== false) {
99            if ($entry != '.' && $entry != '..' && substr($entry, 0, 1) != '.' && is_dir($iconsets_root . '/' . $entry)) {
100                $iconsets_combo[$entry] = $entry;
101            }
102        }
103    }
104}
105
106# Body base font size (37.5% = 6px, 50% = 8px, 62.5% = 10px, 75% = 12px, 87.5% = 14px)
107$htmlfontsize_combo = array(
108    __('Smallest') => '37.5%',
109    __('Smaller')  => '50%',
110    __('Default')  => '62.5%',
111    __('Larger')   => '75%',
112    __('Largest')  => '87,5%'
113);
114
115# Language codes
116$lang_combo = dcAdminCombos::getAdminLangsCombo();
117
118# Get 3rd parts xhtml editor flags
119$rte = array(
120    'blog_descr' => array(true, __('Blog description (in blog parameters)')),
121    'cat_descr'  => array(true, __('Category description'))
122);
123$rte = new ArrayObject($rte);
124$core->callBehavior('adminRteFlags', $core, $rte);
125# Load user settings
126$rte_flags = @$core->auth->user_prefs->interface->rte_flags;
127if (is_array($rte_flags)) {
128    foreach ($rte_flags as $fk => $fv) {
129        if (isset($rte[$fk])) {
130            $rte[$fk][0] = $fv;
131        }
132    }
133}
134
135# Get default colums (admin lists)
136$cols = array(
137    'posts' => array(__('Posts'), array(
138        'date'       => array(true, __('Date')),
139        'category'   => array(true, __('Category')),
140        'author'     => array(true, __('Author')),
141        'comments'   => array(true, __('Comments')),
142        'trackbacks' => array(true, __('Trackbacks'))
143    ))
144);
145$cols = new arrayObject($cols);
146$core->callBehavior('adminColumnsLists', $core, $cols);
147# Load user settings
148$cols_user = @$core->auth->user_prefs->interface->cols;
149if (is_array($cols_user)) {
150    foreach ($cols_user as $ct => $cv) {
151        foreach ($cv as $cn => $cd) {
152            if (isset($cols[$ct][1][$cn])) {
153                $cols[$ct][1][$cn][0] = $cd;
154            }
155        }
156    }
157}
158
159# Add or update user
160if (isset($_POST['user_name'])) {
161    try
162    {
163        $pwd_check = !empty($_POST['cur_pwd']) && $core->auth->checkPassword($_POST['cur_pwd']);
164
165        if ($core->auth->allowPassChange() && !$pwd_check && $user_email != $_POST['user_email']) {
166            throw new Exception(__('If you want to change your email or password you must provide your current password.'));
167        }
168
169        $cur = $core->con->openCursor($core->prefix . 'user');
170
171        $cur->user_name        = $user_name        = $_POST['user_name'];
172        $cur->user_firstname   = $user_firstname   = $_POST['user_firstname'];
173        $cur->user_displayname = $user_displayname = $_POST['user_displayname'];
174        $cur->user_email       = $user_email       = $_POST['user_email'];
175        $cur->user_url         = $user_url         = $_POST['user_url'];
176        $cur->user_lang        = $user_lang        = $_POST['user_lang'];
177        $cur->user_tz          = $user_tz          = $_POST['user_tz'];
178
179        $cur->user_options = new ArrayObject($user_options);
180
181        if ($core->auth->allowPassChange() && !empty($_POST['new_pwd'])) {
182            if (!$pwd_check) {
183                throw new Exception(__('If you want to change your email or password you must provide your current password.'));
184            }
185
186            if ($_POST['new_pwd'] != $_POST['new_pwd_c']) {
187                throw new Exception(__("Passwords don't match"));
188            }
189
190            $cur->user_pwd = $_POST['new_pwd'];
191        }
192
193        # --BEHAVIOR-- adminBeforeUserUpdate
194        $core->callBehavior('adminBeforeUserProfileUpdate', $cur, $core->auth->userID());
195
196        # Udate user
197        $core->updUser($core->auth->userID(), $cur);
198
199        # --BEHAVIOR-- adminAfterUserUpdate
200        $core->callBehavior('adminAfterUserProfileUpdate', $cur, $core->auth->userID());
201
202        dcPage::addSuccessNotice(__('Personal information has been successfully updated.'));
203
204        $core->adminurl->redirect("admin.user.preferences");
205    } catch (Exception $e) {
206        $core->error->add($e->getMessage());
207    }
208}
209
210# Update user options
211if (isset($_POST['user_editor'])) {
212    try
213    {
214        $cur = $core->con->openCursor($core->prefix . 'user');
215
216        $cur->user_name        = $user_name;
217        $cur->user_firstname   = $user_firstname;
218        $cur->user_displayname = $user_displayname;
219        $cur->user_email       = $user_email;
220        $cur->user_url         = $user_url;
221        $cur->user_lang        = $user_lang;
222        $cur->user_tz          = $user_tz;
223
224        $cur->user_post_status = $user_post_status = $_POST['user_post_status'];
225
226        $user_options['edit_size'] = (integer) $_POST['user_edit_size'];
227        if ($user_options['edit_size'] < 1) {
228            $user_options['edit_size'] = 10;
229        }
230        $user_options['post_format']    = $_POST['user_post_format'];
231        $user_options['editor']         = $_POST['user_editor'];
232        $user_options['enable_wysiwyg'] = !empty($_POST['user_wysiwyg']);
233        $user_options['toolbar_bottom'] = !empty($_POST['user_toolbar_bottom']);
234
235        $cur->user_options = new ArrayObject($user_options);
236
237        # --BEHAVIOR-- adminBeforeUserOptionsUpdate
238        $core->callBehavior('adminBeforeUserOptionsUpdate', $cur, $core->auth->userID());
239
240        # Update user prefs
241        $core->auth->user_prefs->accessibility->put('nodragdrop', !empty($_POST['user_acc_nodragdrop']), 'boolean');
242        $core->auth->user_prefs->interface->put('enhanceduploader', !empty($_POST['user_ui_enhanceduploader']), 'boolean');
243        $core->auth->user_prefs->interface->put('hidemoreinfo', !empty($_POST['user_ui_hidemoreinfo']), 'boolean');
244        $core->auth->user_prefs->interface->put('hidehelpbutton', !empty($_POST['user_ui_hidehelpbutton']), 'boolean');
245        $core->auth->user_prefs->interface->put('showajaxloader', !empty($_POST['user_ui_showajaxloader']), 'boolean');
246        $core->auth->user_prefs->interface->put('htmlfontsize', $_POST['user_ui_htmlfontsize'], 'string');
247        $core->auth->user_prefs->interface->put('dynfontsize', !empty($_POST['user_ui_dynfontsize']), 'boolean');
248        if ($core->auth->isSuperAdmin()) {
249            # Applied to all users
250            $core->auth->user_prefs->interface->put('hide_std_favicon', !empty($_POST['user_ui_hide_std_favicon']), 'boolean', null, true, true);
251        }
252        $core->auth->user_prefs->interface->put('media_by_page', (integer) $_POST['user_ui_media_by_page'], 'integer');
253        $core->auth->user_prefs->interface->put('media_nb_last_dirs', (integer) $_POST['user_ui_media_nb_last_dirs'], 'integer');
254        $core->auth->user_prefs->interface->put('media_last_dirs', array(), 'array', null, false);
255        $core->auth->user_prefs->interface->put('media_fav_dirs', array(), 'array', null, false);
256
257        # Update user columns (lists)
258        $cu = array();
259        foreach ($cols as $col_type => $cols_list) {
260            $ct = array();
261            foreach ($cols_list[1] as $col_name => $col_data) {
262                $ct[$col_name] = isset($_POST['cols_' . $col_type]) && in_array($col_name, $_POST['cols_' . $col_type], true) ? true : false;
263            }
264            if (count($ct)) {
265                $cu[$col_type] = $ct;
266            }
267        }
268        $core->auth->user_prefs->interface->put('cols', $cu, 'array');
269
270        # Update user xhtml editor flags
271        $rf = array();
272        foreach ($rte as $rk => $rv) {
273            $rf[$rk] = isset($_POST['rte_flags']) && in_array($rk, $_POST['rte_flags'], true) ? true : false;
274        }
275        $core->auth->user_prefs->interface->put('rte_flags', $rf, 'array');
276
277        # Update user
278        $core->updUser($core->auth->userID(), $cur);
279
280        # --BEHAVIOR-- adminAfterUserOptionsUpdate
281        $core->callBehavior('adminAfterUserOptionsUpdate', $cur, $core->auth->userID());
282
283        dcPage::addSuccessNotice(__('Personal options has been successfully updated.'));
284        $core->adminurl->redirect("admin.user.preferences", array(), '#user-options');
285    } catch (Exception $e) {
286        $core->error->add($e->getMessage());
287    }
288}
289
290# Dashboard options
291if (isset($_POST['db-options'])) {
292    try
293    {
294        # --BEHAVIOR-- adminBeforeUserOptionsUpdate
295        $core->callBehavior('adminBeforeDashboardOptionsUpdate', $core->auth->userID());
296
297        # Update user prefs
298        $core->auth->user_prefs->dashboard->put('doclinks', !empty($_POST['user_dm_doclinks']), 'boolean');
299        $core->auth->user_prefs->dashboard->put('dcnews', !empty($_POST['user_dm_dcnews']), 'boolean');
300        $core->auth->user_prefs->dashboard->put('quickentry', !empty($_POST['user_dm_quickentry']), 'boolean');
301        $core->auth->user_prefs->dashboard->put('nofavicons', empty($_POST['user_dm_nofavicons']), 'boolean');
302        if ($core->auth->isSuperAdmin()) {
303            $core->auth->user_prefs->dashboard->put('nodcupdate', !empty($_POST['user_dm_nodcupdate']), 'boolean');
304        }
305        $core->auth->user_prefs->interface->put('iconset', (!empty($_POST['user_ui_iconset']) ? $_POST['user_ui_iconset'] : ''));
306        $core->auth->user_prefs->interface->put('nofavmenu', empty($_POST['user_ui_nofavmenu']), 'boolean');
307
308        # --BEHAVIOR-- adminAfterUserOptionsUpdate
309        $core->callBehavior('adminAfterDashboardOptionsUpdate', $core->auth->userID());
310
311        dcPage::addSuccessNotice(__('Dashboard options has been successfully updated.'));
312        $core->adminurl->redirect("admin.user.preferences", array(), '#user-favorites');
313    } catch (Exception $e) {
314        $core->error->add($e->getMessage());
315    }
316}
317
318# Add selected favorites
319if (!empty($_POST['appendaction'])) {
320    try {
321        if (empty($_POST['append'])) {
322            throw new Exception(__('No favorite selected'));
323        }
324        $user_favs = $core->favs->getFavoriteIDs(false);
325        foreach ($_POST['append'] as $k => $v) {
326            if ($core->favs->exists($v)) {
327                $user_favs[] = $v;
328            }
329        }
330        $core->favs->setFavoriteIDs($user_favs, false);
331
332        if (!$core->error->flag()) {
333            dcPage::addSuccessNotice(__('Favorites have been successfully added.'));
334            $core->adminurl->redirect("admin.user.preferences", array(), '#user-favorites');
335        }
336    } catch (Exception $e) {
337        $core->error->add($e->getMessage());
338    }
339}
340
341# Delete selected favorites
342if (!empty($_POST['removeaction'])) {
343    try {
344        if (empty($_POST['remove'])) {
345            throw new Exception(__('No favorite selected'));
346        }
347        $user_fav_ids = array();
348        foreach ($core->favs->getFavoriteIDs(false) as $v) {
349            $user_fav_ids[$v] = true;
350        }
351        foreach ($_POST['remove'] as $v) {
352            if (isset($user_fav_ids[$v])) {
353                unset($user_fav_ids[$v]);
354            }
355        }
356        $core->favs->setFavoriteIDs(array_keys($user_fav_ids), false);
357        if (!$core->error->flag()) {
358            dcPage::addSuccessNotice(__('Favorites have been successfully removed.'));
359            $core->adminurl->redirect("admin.user.preferences", array(), '#user-favorites');
360        }
361    } catch (Exception $e) {
362        $core->error->add($e->getMessage());
363    }
364}
365
366# Order favs
367$order = array();
368if (empty($_POST['favs_order']) && !empty($_POST['order'])) {
369    $order = $_POST['order'];
370    asort($order);
371    $order = array_keys($order);
372} elseif (!empty($_POST['favs_order'])) {
373    $order = explode(',', $_POST['favs_order']);
374}
375
376if (!empty($_POST['saveorder']) && !empty($order)) {
377    foreach ($order as $k => $v) {
378        if (!$core->favs->exists($v)) {
379            unset($order[$k]);
380        }
381    }
382    $core->favs->setFavoriteIDs($order, false);
383    if (!$core->error->flag()) {
384        dcPage::addSuccessNotice(__('Favorites have been successfully updated.'));
385        $core->adminurl->redirect("admin.user.preferences", array(), '#user-favorites');
386    }
387}
388
389# Replace default favorites by current set (super admin only)
390if (!empty($_POST['replace']) && $core->auth->isSuperAdmin()) {
391    $user_favs = $core->favs->getFavoriteIDs(false);
392    $core->favs->setFavoriteIDs($user_favs, true);
393
394    if (!$core->error->flag()) {
395        dcPage::addSuccessNotice(__('Default favorites have been successfully updated.'));
396        $core->adminurl->redirect("admin.user.preferences", array(), '#user-favorites');
397    }
398}
399
400/* DISPLAY
401-------------------------------------------------------- */
402dcPage::open($page_title,
403    dcPage::jsLoad('js/_preferences.js') .
404    ($user_acc_nodragdrop ? '' : dcPage::jsLoad('js/_preferences-dragdrop.js')) .
405    dcPage::jsLoad('js/jquery/jquery-ui.custom.js') .
406    dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js') .
407    dcPage::jsLoad('js/jquery/jquery.pwstrength.js') .
408    '<script type="text/javascript">' . "\n" .
409    "\$(function() {\n" .
410    "   \$('#new_pwd').pwstrength({texts: ['" .
411    sprintf(__('Password strength: %s'), __('very weak')) . "', '" .
412    sprintf(__('Password strength: %s'), __('weak')) . "', '" .
413    sprintf(__('Password strength: %s'), __('mediocre')) . "', '" .
414    sprintf(__('Password strength: %s'), __('strong')) . "', '" .
415    sprintf(__('Password strength: %s'), __('very strong')) . "']});\n" .
416    "});\n" .
417    "</script>\n" .
418    dcPage::jsPageTabs($default_tab) .
419    dcPage::jsConfirmClose('user-form', 'opts-forms', 'favs-form') .
420
421    # --BEHAVIOR-- adminPreferencesHeaders
422    $core->callBehavior('adminPreferencesHeaders'),
423
424    dcPage::breadcrumb(
425        array(
426            html::escapeHTML($core->auth->userID()) => '',
427            $page_title                             => ''
428        ))
429);
430
431# User profile
432echo '<div class="multi-part" id="user-profile" title="' . __('My profile') . '">';
433
434echo
435'<h3>' . __('My profile') . '</h3>' .
436'<form action="' . $core->adminurl->get("admin.user.preferences") . '" method="post" id="user-form">' .
437
438'<p><label for="user_name">' . __('Last Name:') . '</label>' .
439form::field('user_name', 20, 255, html::escapeHTML($user_name)) . '</p>' .
440
441'<p><label for="user_firstname">' . __('First Name:') . '</label>' .
442form::field('user_firstname', 20, 255, html::escapeHTML($user_firstname)) . '</p>' .
443
444'<p><label for="user_displayname">' . __('Display name:') . '</label>' .
445form::field('user_displayname', 20, 255, html::escapeHTML($user_displayname)) . '</p>' .
446
447'<p><label for="user_email">' . __('Email:') . '</label>' .
448form::field('user_email', 20, 255, html::escapeHTML($user_email)) . '</p>' .
449
450'<p><label for="user_url">' . __('URL:') . '</label>' .
451form::field('user_url', 30, 255, html::escapeHTML($user_url)) . '</p>' .
452
453'<p><label for="user_lang">' . __('Language for my interface:') . '</label>' .
454form::combo('user_lang', $lang_combo, $user_lang, 'l10n') . '</p>' .
455
456'<p><label for="user_tz">' . __('My timezone:') . '</label>' .
457form::combo('user_tz', dt::getZones(true, true), $user_tz) . '</p>';
458
459if ($core->auth->allowPassChange()) {
460    echo
461    '<h4 class="vertical-separator pretty-title">' . __('Change my password') . '</h4>' .
462
463    '<div class="pw-table">' .
464    '<p class="pw-cell"><label for="new_pwd">' . __('New password:') . '</label>' .
465    form::password('new_pwd', 20, 255,
466        array(
467            'extra_html'   => 'data-indicator="pwindicator"',
468            'autocomplete' => 'new-password')
469    ) . '</p>' .
470    '<div id="pwindicator">' .
471    '    <div class="bar"></div>' .
472    '    <p class="label no-margin"></p>' .
473    '</div>' .
474    '</div>' .
475
476    '<p><label for="new_pwd_c">' . __('Confirm new password:') . '</label>' .
477    form::password('new_pwd_c', 20, 255,
478        array(
479            'autocomplete' => 'new-password')
480    ) . '</p>' .
481
482    '<p><label for="cur_pwd">' . __('Your current password:') . '</label>' .
483    form::password('cur_pwd', 20, 255,
484        array(
485            'autocomplete' => 'current-password')
486    ) . '</p>' .
487    '<p class="form-note warn">' .
488    __('If you have changed your email or password you must provide your current password to save these modifications.') .
489        '</p>';
490}
491
492echo
493'<p class="clear vertical-separator">' .
494$core->formNonce() .
495'<input type="submit" accesskey="s" value="' . __('Update my profile') . '" /></p>' .
496    '</form>' .
497
498    '</div>';
499
500# User options : some from actual user profile, dashboard modules, ...
501echo '<div class="multi-part" id="user-options" title="' . __('My options') . '">';
502
503echo
504'<form action="' . $core->adminurl->get("admin.user.preferences") . '#user-options" method="post" id="opts-forms">' .
505'<h3>' . __('My options') . '</h3>';
506
507echo
508'<div class="fieldset">' .
509'<h4 id="user_options_interface">' . __('Interface') . '</h4>' .
510
511'<p><label for="user_ui_enhanceduploader" class="classic">' .
512form::checkbox('user_ui_enhanceduploader', 1, $user_ui_enhanceduploader) . ' ' .
513__('Activate enhanced uploader in media manager') . '</label></p>' .
514
515'<p><label for="user_acc_nodragdrop" class="classic">' .
516form::checkbox('user_acc_nodragdrop', 1, $user_acc_nodragdrop) . ' ' .
517__('Disable javascript powered drag and drop for ordering items') . '</label></p>' .
518'<p class="clear form-note">' . __('If checked, numeric fields will allow to type the elements\' ordering number.') . '</p>' .
519
520'<p><label for="user_ui_hidemoreinfo" class="classic">' .
521form::checkbox('user_ui_hidemoreinfo', 1, $user_ui_hidemoreinfo) . ' ' .
522__('Hide all secondary information and notes') . '</label></p>' .
523
524'<p><label for="user_ui_hidehelpbutton" class="classic">' .
525form::checkbox('user_ui_hidehelpbutton', 1, $user_ui_hidehelpbutton) . ' ' .
526__('Hide help button') . '</label></p>' .
527
528'<p><label for="user_ui_showajaxloader" class="classic">' .
529form::checkbox('user_ui_showajaxloader', 1, $user_ui_showajaxloader) . ' ' .
530__('Show asynchronous requests indicator') . '</label></p>' .
531
532'<p><label for="user_ui_htmlfontsize" class="classic">' . __('Font size:') . '</label>' . ' ' .
533form::combo('user_ui_htmlfontsize', $htmlfontsize_combo, $user_ui_htmlfontsize) . '</p>' .
534
535'<p><label for="user_ui_dynfontsize" class="classic">' .
536form::checkbox('user_ui_dynfontsize', 1, $user_ui_dynfontsize) . ' ' .
537__('Activate adpative font size') . '</label></p>' .
538'<p class="clear form-note">' . __('If checked, font size will vary depending on viewport size (from 12px to 16px with default font size selected).') . '</p>';
539
540echo
541'<p><label for="user_ui_media_by_page" class="classic">' . __('Number of elements displayed per page in media manager:') . '</label> ' .
542form::field('user_ui_media_by_page', 5, 3, (integer) $user_ui_media_by_page) . '</p>';
543
544echo
545'<p><label for="user_ui_media_nb_last_dirs" class="classic">' . __('Number of recent folders proposed in media manager:') . '</label> ' .
546form::field('user_ui_media_nb_last_dirs', 5, 3, (integer) $user_ui_media_nb_last_dirs) . '</p>' .
547'<p class="clear form-note">' . __('Leave empty to ignore, displayed only if Javascript is enabled in your browser.') . '</p>';
548
549if ($core->auth->isSuperAdmin()) {
550    echo
551    '<p><label for="user_ui_hide_std_favicon" class="classic">' .
552    form::checkbox('user_ui_hide_std_favicon', 1, $user_ui_hide_std_favicon) . ' ' .
553    __('Do not use standard favicon') . '</label> ' .
554    '<span class="clear form-note warn">' . __('This will be applied for all users') . '.</span>' .
555        '</p>'; //Opera sucks;
556}
557
558echo
559    '</div>';
560
561echo
562'<div class="fieldset">' .
563'<h4 id="user_options_columns">' . __('Optional columns displayed in lists') . '</h4>';
564$odd = true;
565foreach ($cols as $col_type => $col_list) {
566    echo '<div class="two-boxes ' . ($odd ? 'odd' : 'even') . '">';
567    echo '<h5>' . $col_list[0] . '</h5>';
568    foreach ($col_list[1] as $col_name => $col_data) {
569        echo
570        '<p><label for="cols_' . $col_type . '-' . $col_name . '" class="classic">' .
571        form::checkbox(array('cols_' . $col_type . '[]', 'cols_' . $col_type . '-' . $col_name), $col_name, $col_data[0]) . $col_data[1] . '</label>';
572    }
573    echo '</div>';
574    $odd = !$odd;
575}
576echo '</div>';
577
578echo
579'<div class="fieldset">' .
580'<h4 id="user_options_edition">' . __('Edition') . '</h4>';
581
582echo '<div class="two-boxes odd">';
583foreach ($format_by_editors as $format => $editors) {
584    echo
585    '<p class="field"><label for="user_editor_' . $format . '">' . sprintf(__('Preferred editor for %s:'), $format) . '</label>' .
586    form::combo(
587        array('user_editor[' . $format . ']', 'user_editor_' . $format),
588        array_merge(array(__('Choose an editor') => ''), $editors),
589        $user_options['editor'][$format]
590    ) . '</p>';
591}
592echo
593'<p class="field"><label for="user_post_format">' . __('Preferred format:') . '</label>' .
594form::combo('user_post_format', $available_formats, $user_options['post_format']) . '</p>';
595
596echo
597'<p class="field"><label for="user_post_status">' . __('Default entry status:') . '</label>' .
598form::combo('user_post_status', $status_combo, $user_post_status) . '</p>' .
599
600'<p class="field"><label for="user_edit_size">' . __('Entry edit field height:') . '</label>' .
601form::field('user_edit_size', 5, 4, (integer) $user_options['edit_size']) . '</p>' .
602
603'<p><label for="user_wysiwyg" class="classic">' .
604form::checkbox('user_wysiwyg', 1, $user_options['enable_wysiwyg']) . ' ' .
605__('Enable WYSIWYG mode') . '</label></p>' .
606
607'<p><label for="user_toolbar_bottom" class="classic">' .
608form::checkbox('user_toolbar_bottom', 1, $user_options['toolbar_bottom']) . ' ' .
609__('Display editor\'s toolbar at bottom of textarea (if possible)') . '</label></p>' .
610
611    '</div>';
612
613echo '<div class="two-boxes even">';
614echo '<h5>' . __('Use xhtml editor for:') . '</h5>';
615foreach ($rte as $rk => $rv) {
616    echo
617    '<p><label for="rte_' . $rk . '" class="classic">' .
618    form::checkbox(array('rte_flags[]', 'rte_' . $rk), $rk, $rv[0]) . $rv[1] . '</label>';
619}
620echo '</div>';
621
622echo '</div>'; // fieldset
623
624echo
625'<h4 class="pretty-title">' . __('Other options') . '</h4>';
626
627# --BEHAVIOR-- adminPreferencesForm
628$core->callBehavior('adminPreferencesForm', $core);
629
630echo
631'<p class="clear vertical-separator">' .
632$core->formNonce() .
633'<input type="submit" accesskey="s" value="' . __('Save my options') . '" /></p>' .
634    '</form>';
635
636echo '</div>';
637
638# My dashboard
639echo '<div class="multi-part" id="user-favorites" title="' . __('My dashboard') . '">';
640$ws = $core->auth->user_prefs->addWorkspace('favorites');
641echo '<h3>' . __('My dashboard') . '</h3>';
642
643echo '<form action="' . $core->adminurl->get("admin.user.preferences") . '" method="post" id="favs-form" class="two-boxes odd">';
644
645echo '<div id="my-favs" class="fieldset"><h4>' . __('My favorites') . '</h4>';
646
647$count    = 0;
648$user_fav = $core->favs->getFavoriteIDs(false);
649foreach ($user_fav as $id) {
650    $fav = $core->favs->getFavorite($id);
651    if ($fav != false) {
652        // User favorites only
653        if ($count == 0) {
654            echo '<ul class="fav-list">';
655        }
656
657        $count++;
658        echo '<li id="fu-' . $id . '">' . '<label for="fuk-' . $id . '">' .
659        '<img src="' . dc_admin_icon_url($fav['small-icon']) . '" alt="" /> ' . '<span class="zoom"><img src="' . dc_admin_icon_url($fav['large-icon']) . '" alt="" /></span>' .
660        form::field(array('order[' . $id . ']'), 2, 3, $count, 'position', '', false, 'title="' . sprintf(__('position of %s'), $fav['title']) . '"') .
661        form::hidden(array('dynorder[]', 'dynorder-' . $id . ''), $id) .
662        form::checkbox(array('remove[]', 'fuk-' . $id), $id) . __($fav['title']) . '</label>' .
663            '</li>';
664    }
665}
666if ($count > 0) {
667    echo '</ul>';
668}
669
670if ($count > 0) {
671    echo
672    '<div class="clear">' .
673    '<p>' . form::hidden('favs_order', '') .
674    $core->formNonce() .
675    '<input type="submit" name="saveorder" value="' . __('Save order') . '" /> ' .
676
677    '<input type="submit" class="delete" name="removeaction" ' .
678    'value="' . __('Delete selected favorites') . '" ' .
679    'onclick="return window.confirm(\'' . html::escapeJS(
680        __('Are you sure you want to remove selected favorites?')) . '\');" /></p>' .
681
682        ($core->auth->isSuperAdmin() ?
683        '<div class="info">' .
684        '<p>' . __('If you are a super administrator, you may define this set of favorites to be used by default on all blogs of this installation.') . '</p>' .
685        '<p><input class="reset" type="submit" name="replace" value="' . __('Define as default favorites') . '" />' . '</p>' .
686        '</div>'
687        :
688        '') .
689
690        '</div>';
691} else {
692    echo
693    '<p>' . __('Currently no personal favorites.') . '</p>';
694}
695
696$avail_fav       = $core->favs->getFavorites($core->favs->getAvailableFavoritesIDs());
697$default_fav_ids = array();
698foreach ($core->favs->getFavoriteIDs(true) as $v) {
699    $default_fav_ids[$v] = true;
700}
701echo '</div>'; # /box my-fav
702
703echo '<div class="fieldset" id="available-favs">';
704# Available favorites
705echo '<h5 class="pretty-title">' . __('Other available favorites') . '</h5>';
706$count = 0;
707uasort($avail_fav, function ($a, $b) {
708    return strcoll(
709        strtolower(dcUtils::removeDiacritics($a['title'])),
710        strtolower(dcUtils::removeDiacritics($b['title'])));
711});
712
713foreach ($avail_fav as $k => $v) {
714    if (in_array($k, $user_fav)) {
715        unset($avail_fav[$k]);
716    }
717}
718foreach ($avail_fav as $k => $fav) {
719    if ($count == 0) {
720        echo '<ul class="fav-list">';
721    }
722
723    $count++;
724    echo '<li id="fa-' . $k . '">' . '<label for="fak-' . $k . '">' .
725    '<img src="' . dc_admin_icon_url($fav['small-icon']) . '" alt="" /> ' .
726    '<span class="zoom"><img src="' . dc_admin_icon_url($fav['large-icon']) . '" alt="" /></span>' .
727    form::checkbox(array('append[]', 'fak-' . $k), $k) .
728        $fav['title'] . '</label>' .
729        (isset($default_fav_ids[$k]) ? ' <span class="default-fav"><img src="images/selected.png" alt="' . __('(default favorite)') . '" /></span>' : '') .
730        '</li>';
731}
732if ($count > 0) {
733    echo '</ul>';
734}
735
736echo
737'<p>' .
738$core->formNonce() .
739'<input type="submit" name="appendaction" value="' . __('Add to my favorites') . '" /></p>';
740echo '</div>'; # /available favorites
741
742echo '</form>';
743
744echo
745'<form action="' . $core->adminurl->get("admin.user.preferences") . '" method="post" id="db-forms" class="two-boxes even">' .
746
747'<div class="fieldset">' .
748'<h4>' . __('Menu') . '</h4>' .
749'<p><label for="user_ui_nofavmenu" class="classic">' .
750form::checkbox('user_ui_nofavmenu', 1, !$user_ui_nofavmenu) . ' ' .
751__('Display favorites at the top of the menu') . '</label></p></div>';
752
753echo
754'<div class="fieldset">' .
755'<h4>' . __('Dashboard icons') . '</h4>' .
756'<p><label for="user_dm_nofavicons" class="classic">' .
757form::checkbox('user_dm_nofavicons', 1, !$user_dm_nofavicons) . ' ' .
758__('Display dashboard icons') . '</label></p>';
759
760if (count($iconsets_combo) > 1) {
761    echo
762    '<p><label for="user_ui_iconset" class="classic">' . __('Iconset:') . '</label> ' .
763    form::combo('user_ui_iconset', $iconsets_combo, $user_ui_iconset) . '</p>';
764} else {
765    echo '<p class="hidden">' . form::hidden('user_ui_iconset', '') . '</p>';
766}
767echo
768    '</div>';
769
770echo
771'<div class="fieldset">' .
772'<h4>' . __('Dashboard modules') . '</h4>' .
773
774'<p><label for="user_dm_doclinks" class="classic">' .
775form::checkbox('user_dm_doclinks', 1, $user_dm_doclinks) . ' ' .
776__('Display documentation links') . '</label></p>' .
777
778'<p><label for="user_dm_dcnews" class="classic">' .
779form::checkbox('user_dm_dcnews', 1, $user_dm_dcnews) . ' ' .
780__('Display Dotclear news') . '</label></p>' .
781
782'<p><label for="user_dm_quickentry" class="classic">' .
783form::checkbox('user_dm_quickentry', 1, $user_dm_quickentry) . ' ' .
784__('Display quick entry form') . '</label></p>';
785
786if ($core->auth->isSuperAdmin()) {
787    echo
788    '<p><label for="user_dm_nodcupdate" class="classic">' .
789    form::checkbox('user_dm_nodcupdate', 1, $user_dm_nodcupdate) . ' ' .
790    __('Do not display Dotclear updates') . '</label></p>';
791}
792
793echo '</div>';
794
795# --BEHAVIOR-- adminDashboardOptionsForm
796$core->callBehavior('adminDashboardOptionsForm', $core);
797
798echo
799'<p>' .
800form::hidden('db-options', '-') .
801$core->formNonce() .
802'<input type="submit" accesskey="s" value="' . __('Save my dashboard options') . '" /></p>' .
803    '</form>';
804
805echo '</div>'; # /multipart-user-favorites
806
807dcPage::helpBlock('core_user_pref');
808dcPage::close();
Note: See TracBrowser for help on using the repository browser.

Sites map