auth->getInfo('user_name'); $user_firstname = $core->auth->getInfo('user_firstname'); $user_displayname = $core->auth->getInfo('user_displayname'); $user_email = $core->auth->getInfo('user_email'); $user_url = $core->auth->getInfo('user_url'); $user_lang = $core->auth->getInfo('user_lang'); $user_tz = $core->auth->getInfo('user_tz'); $user_post_status = $core->auth->getInfo('user_post_status'); $user_options = $core->auth->getOptions(); if (empty($user_options['editor']) || !is_array($user_options['editor'])) { $user_options['editor'] = []; } $core->auth->user_prefs->addWorkspace('dashboard'); $user_dm_doclinks = $core->auth->user_prefs->dashboard->doclinks; $user_dm_dcnews = $core->auth->user_prefs->dashboard->dcnews; $user_dm_quickentry = $core->auth->user_prefs->dashboard->quickentry; $user_dm_nofavicons = $core->auth->user_prefs->dashboard->nofavicons; if ($core->auth->isSuperAdmin()) { $user_dm_nodcupdate = $core->auth->user_prefs->dashboard->nodcupdate; } $core->auth->user_prefs->addWorkspace('accessibility'); $user_acc_nodragdrop = $core->auth->user_prefs->accessibility->nodragdrop; $core->auth->user_prefs->addWorkspace('interface'); $user_ui_darkmode = $core->auth->user_prefs->interface->darkmode; $user_ui_enhanceduploader = $core->auth->user_prefs->interface->enhanceduploader; $user_ui_hidemoreinfo = $core->auth->user_prefs->interface->hidemoreinfo; $user_ui_hidehelpbutton = $core->auth->user_prefs->interface->hidehelpbutton; $user_ui_showajaxloader = $core->auth->user_prefs->interface->showajaxloader; $user_ui_htmlfontsize = $core->auth->user_prefs->interface->htmlfontsize; $user_ui_dynfontsize = $core->auth->user_prefs->interface->dynfontsize; if ($core->auth->isSuperAdmin()) { $user_ui_hide_std_favicon = $core->auth->user_prefs->interface->hide_std_favicon; } $user_ui_iconset = @$core->auth->user_prefs->interface->iconset; $user_ui_nofavmenu = $core->auth->user_prefs->interface->nofavmenu; $user_ui_media_by_page = ($core->auth->user_prefs->interface->media_by_page ?: 30); $user_ui_media_nb_last_dirs = $core->auth->user_prefs->interface->media_nb_last_dirs; $default_tab = !empty($_GET['tab']) ? html::escapeHTML($_GET['tab']) : 'user-profile'; if (!empty($_GET['append']) || !empty($_GET['removed']) || !empty($_GET['neworder']) || !empty($_GET['replaced']) || !empty($_POST['appendaction']) || !empty($_POST['removeaction']) || !empty($_GET['db-updated']) || !empty($_POST['resetorder'])) { $default_tab = 'user-favorites'; } elseif (!empty($_GET['updated'])) { $default_tab = 'user-options'; } if (($default_tab != 'user-profile') && ($default_tab != 'user-options') && ($default_tab != 'user-favorites')) { $default_tab = 'user-profile'; } # Editors combo $editors_combo = dcAdminCombos::getEditorsCombo(); $editors = array_keys($editors_combo); # Format by editors $formaters = $core->getFormaters(); $format_by_editors = []; foreach ($formaters as $editor => $formats) { foreach ($formats as $format) { $format_by_editors[$format][$editor] = $editor; } } $available_formats = ['' => '']; foreach (array_keys($format_by_editors) as $format) { $available_formats[$format] = $format; if (!isset($user_options['editor'][$format])) { $user_options['editor'][$format] = ''; } } $status_combo = dcAdminCombos::getPostStatusescombo(); $iconsets_combo = [__('Default') => '']; $iconsets_root = dirname(__FILE__) . '/images/iconset/'; if (is_dir($iconsets_root) && is_readable($iconsets_root)) { if (($d = @dir($iconsets_root)) !== false) { while (($entry = $d->read()) !== false) { if ($entry != '.' && $entry != '..' && substr($entry, 0, 1) != '.' && is_dir($iconsets_root . '/' . $entry)) { $iconsets_combo[$entry] = $entry; } } } } # Body base font size (37.5% = 6px, 50% = 8px, 62.5% = 10px, 75% = 12px, 87.5% = 14px) $htmlfontsize_combo = [ __('Smallest') => '37.5%', __('Smaller') => '50%', __('Default') => '62.5%', __('Larger') => '75%', __('Largest') => '87,5%' ]; # Ensure Font size is set to default is empty if ($user_ui_htmlfontsize == '') { $user_ui_htmlfontsize = '62.5%'; } # Language codes $lang_combo = dcAdminCombos::getAdminLangsCombo(); # Get 3rd parts xhtml editor flags $rte = [ 'blog_descr' => [true, __('Blog description (in blog parameters)')], 'cat_descr' => [true, __('Category description')] ]; $rte = new ArrayObject($rte); $core->callBehavior('adminRteFlags', $core, $rte); # Load user settings $rte_flags = @$core->auth->user_prefs->interface->rte_flags; if (is_array($rte_flags)) { foreach ($rte_flags as $fk => $fv) { if (isset($rte[$fk])) { $rte[$fk][0] = $fv; } } } # Get default colums (admin lists) $cols = [ 'posts' => [__('Posts'), [ 'date' => [true, __('Date')], 'category' => [true, __('Category')], 'author' => [true, __('Author')], 'comments' => [true, __('Comments')], 'trackbacks' => [true, __('Trackbacks')] ]] ]; $cols = new arrayObject($cols); $core->callBehavior('adminColumnsLists', $core, $cols); # Load user settings $cols_user = @$core->auth->user_prefs->interface->cols; if (is_array($cols_user)) { foreach ($cols_user as $ct => $cv) { foreach ($cv as $cn => $cd) { if (isset($cols[$ct][1][$cn])) { $cols[$ct][1][$cn][0] = $cd; } } } } # Add or update user if (isset($_POST['user_name'])) { try { $pwd_check = !empty($_POST['cur_pwd']) && $core->auth->checkPassword($_POST['cur_pwd']); if ($core->auth->allowPassChange() && !$pwd_check && $user_email != $_POST['user_email']) { throw new Exception(__('If you want to change your email or password you must provide your current password.')); } $cur = $core->con->openCursor($core->prefix . 'user'); $cur->user_name = $user_name = $_POST['user_name']; $cur->user_firstname = $user_firstname = $_POST['user_firstname']; $cur->user_displayname = $user_displayname = $_POST['user_displayname']; $cur->user_email = $user_email = $_POST['user_email']; $cur->user_url = $user_url = $_POST['user_url']; $cur->user_lang = $user_lang = $_POST['user_lang']; $cur->user_tz = $user_tz = $_POST['user_tz']; $cur->user_options = new ArrayObject($user_options); if ($core->auth->allowPassChange() && !empty($_POST['new_pwd'])) { if (!$pwd_check) { throw new Exception(__('If you want to change your email or password you must provide your current password.')); } if ($_POST['new_pwd'] != $_POST['new_pwd_c']) { throw new Exception(__("Passwords don't match")); } $cur->user_pwd = $_POST['new_pwd']; } # --BEHAVIOR-- adminBeforeUserUpdate $core->callBehavior('adminBeforeUserProfileUpdate', $cur, $core->auth->userID()); # Udate user $core->updUser($core->auth->userID(), $cur); # --BEHAVIOR-- adminAfterUserUpdate $core->callBehavior('adminAfterUserProfileUpdate', $cur, $core->auth->userID()); dcPage::addSuccessNotice(__('Personal information has been successfully updated.')); $core->adminurl->redirect("admin.user.preferences"); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Update user options if (isset($_POST['user_editor'])) { try { $cur = $core->con->openCursor($core->prefix . 'user'); $cur->user_name = $user_name; $cur->user_firstname = $user_firstname; $cur->user_displayname = $user_displayname; $cur->user_email = $user_email; $cur->user_url = $user_url; $cur->user_lang = $user_lang; $cur->user_tz = $user_tz; $cur->user_post_status = $user_post_status = $_POST['user_post_status']; $user_options['edit_size'] = (integer) $_POST['user_edit_size']; if ($user_options['edit_size'] < 1) { $user_options['edit_size'] = 10; } $user_options['post_format'] = $_POST['user_post_format']; $user_options['editor'] = $_POST['user_editor']; $user_options['enable_wysiwyg'] = !empty($_POST['user_wysiwyg']); $user_options['toolbar_bottom'] = !empty($_POST['user_toolbar_bottom']); $cur->user_options = new ArrayObject($user_options); # --BEHAVIOR-- adminBeforeUserOptionsUpdate $core->callBehavior('adminBeforeUserOptionsUpdate', $cur, $core->auth->userID()); # Update user prefs $core->auth->user_prefs->accessibility->put('nodragdrop', !empty($_POST['user_acc_nodragdrop']), 'boolean'); $core->auth->user_prefs->interface->put('darkmode', !empty($_POST['user_ui_darkmode']), 'boolean'); $core->auth->user_prefs->interface->put('enhanceduploader', !empty($_POST['user_ui_enhanceduploader']), 'boolean'); $core->auth->user_prefs->interface->put('hidemoreinfo', !empty($_POST['user_ui_hidemoreinfo']), 'boolean'); $core->auth->user_prefs->interface->put('hidehelpbutton', !empty($_POST['user_ui_hidehelpbutton']), 'boolean'); $core->auth->user_prefs->interface->put('showajaxloader', !empty($_POST['user_ui_showajaxloader']), 'boolean'); $core->auth->user_prefs->interface->put('htmlfontsize', $_POST['user_ui_htmlfontsize'], 'string'); $core->auth->user_prefs->interface->put('dynfontsize', !empty($_POST['user_ui_dynfontsize']), 'boolean'); if ($core->auth->isSuperAdmin()) { # Applied to all users $core->auth->user_prefs->interface->put('hide_std_favicon', !empty($_POST['user_ui_hide_std_favicon']), 'boolean', null, true, true); } $core->auth->user_prefs->interface->put('media_by_page', (integer) $_POST['user_ui_media_by_page'], 'integer'); $core->auth->user_prefs->interface->put('media_nb_last_dirs', (integer) $_POST['user_ui_media_nb_last_dirs'], 'integer'); $core->auth->user_prefs->interface->put('media_last_dirs', [], 'array', null, false); $core->auth->user_prefs->interface->put('media_fav_dirs', [], 'array', null, false); # Update user columns (lists) $cu = []; foreach ($cols as $col_type => $cols_list) { $ct = []; foreach ($cols_list[1] as $col_name => $col_data) { $ct[$col_name] = isset($_POST['cols_' . $col_type]) && in_array($col_name, $_POST['cols_' . $col_type], true) ? true : false; } if (count($ct)) { $cu[$col_type] = $ct; } } $core->auth->user_prefs->interface->put('cols', $cu, 'array'); # Update user xhtml editor flags $rf = []; foreach ($rte as $rk => $rv) { $rf[$rk] = isset($_POST['rte_flags']) && in_array($rk, $_POST['rte_flags'], true) ? true : false; } $core->auth->user_prefs->interface->put('rte_flags', $rf, 'array'); # Update user $core->updUser($core->auth->userID(), $cur); # --BEHAVIOR-- adminAfterUserOptionsUpdate $core->callBehavior('adminAfterUserOptionsUpdate', $cur, $core->auth->userID()); dcPage::addSuccessNotice(__('Personal options has been successfully updated.')); $core->adminurl->redirect("admin.user.preferences", [], '#user-options'); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Dashboard options if (isset($_POST['db-options'])) { try { # --BEHAVIOR-- adminBeforeUserOptionsUpdate $core->callBehavior('adminBeforeDashboardOptionsUpdate', $core->auth->userID()); # Update user prefs $core->auth->user_prefs->dashboard->put('doclinks', !empty($_POST['user_dm_doclinks']), 'boolean'); $core->auth->user_prefs->dashboard->put('dcnews', !empty($_POST['user_dm_dcnews']), 'boolean'); $core->auth->user_prefs->dashboard->put('quickentry', !empty($_POST['user_dm_quickentry']), 'boolean'); $core->auth->user_prefs->dashboard->put('nofavicons', empty($_POST['user_dm_nofavicons']), 'boolean'); if ($core->auth->isSuperAdmin()) { $core->auth->user_prefs->dashboard->put('nodcupdate', !empty($_POST['user_dm_nodcupdate']), 'boolean'); } $core->auth->user_prefs->interface->put('iconset', (!empty($_POST['user_ui_iconset']) ? $_POST['user_ui_iconset'] : '')); $core->auth->user_prefs->interface->put('nofavmenu', empty($_POST['user_ui_nofavmenu']), 'boolean'); # --BEHAVIOR-- adminAfterUserOptionsUpdate $core->callBehavior('adminAfterDashboardOptionsUpdate', $core->auth->userID()); dcPage::addSuccessNotice(__('Dashboard options has been successfully updated.')); $core->adminurl->redirect("admin.user.preferences", [], '#user-favorites'); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Add selected favorites if (!empty($_POST['appendaction'])) { try { if (empty($_POST['append'])) { throw new Exception(__('No favorite selected')); } $user_favs = $core->favs->getFavoriteIDs(false); foreach ($_POST['append'] as $k => $v) { if ($core->favs->exists($v)) { $user_favs[] = $v; } } $core->favs->setFavoriteIDs($user_favs, false); if (!$core->error->flag()) { dcPage::addSuccessNotice(__('Favorites have been successfully added.')); $core->adminurl->redirect("admin.user.preferences", [], '#user-favorites'); } } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Delete selected favorites if (!empty($_POST['removeaction'])) { try { if (empty($_POST['remove'])) { throw new Exception(__('No favorite selected')); } $user_fav_ids = []; foreach ($core->favs->getFavoriteIDs(false) as $v) { $user_fav_ids[$v] = true; } foreach ($_POST['remove'] as $v) { if (isset($user_fav_ids[$v])) { unset($user_fav_ids[$v]); } } $core->favs->setFavoriteIDs(array_keys($user_fav_ids), false); if (!$core->error->flag()) { dcPage::addSuccessNotice(__('Favorites have been successfully removed.')); $core->adminurl->redirect("admin.user.preferences", [], '#user-favorites'); } } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Order favs $order = []; if (empty($_POST['favs_order']) && !empty($_POST['order'])) { $order = $_POST['order']; asort($order); $order = array_keys($order); } elseif (!empty($_POST['favs_order'])) { $order = explode(',', $_POST['favs_order']); } if (!empty($_POST['saveorder']) && !empty($order)) { foreach ($order as $k => $v) { if (!$core->favs->exists($v)) { unset($order[$k]); } } $core->favs->setFavoriteIDs($order, false); if (!$core->error->flag()) { dcPage::addSuccessNotice(__('Favorites have been successfully updated.')); $core->adminurl->redirect("admin.user.preferences", [], '#user-favorites'); } } # Replace default favorites by current set (super admin only) if (!empty($_POST['replace']) && $core->auth->isSuperAdmin()) { $user_favs = $core->favs->getFavoriteIDs(false); $core->favs->setFavoriteIDs($user_favs, true); if (!$core->error->flag()) { dcPage::addSuccessNotice(__('Default favorites have been successfully updated.')); $core->adminurl->redirect("admin.user.preferences", [], '#user-favorites'); } } # Reset dashboard items order if (!empty($_POST['resetorder'])) { $core->auth->user_prefs->dashboard->drop('main_order'); $core->auth->user_prefs->dashboard->drop('boxes_order'); $core->auth->user_prefs->dashboard->drop('boxes_items_order'); $core->auth->user_prefs->dashboard->drop('boxes_contents_order'); if (!$core->error->flag()) { dcPage::addSuccessNotice(__('Dashboard items order have been successfully reset.')); $core->adminurl->redirect("admin.user.preferences", [], '#user-favorites'); } } /* DISPLAY -------------------------------------------------------- */ dcPage::open($page_title, dcPage::jsLoad('js/_preferences.js') . ($user_acc_nodragdrop ? '' : dcPage::jsLoad('js/_preferences-dragdrop.js')) . dcPage::jsLoad('js/jquery/jquery-ui.custom.js') . dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js') . dcPage::jsLoad('js/jquery/jquery.pwstrength.js') . '\n" . dcPage::jsPageTabs($default_tab) . dcPage::jsConfirmClose('user-form', 'opts-forms', 'favs-form') . # --BEHAVIOR-- adminPreferencesHeaders $core->callBehavior('adminPreferencesHeaders'), dcPage::breadcrumb( [ html::escapeHTML($core->auth->userID()) => '', $page_title => '' ]) ); # User profile echo '
'; echo '

' . __('My profile') . '

' . '
' . '

' . form::field('user_name', 20, 255, [ 'default' => html::escapeHTML($user_name), 'autocomplete' => 'family-name' ]) . '

' . '

' . form::field('user_firstname', 20, 255, [ 'default' => html::escapeHTML($user_firstname), 'autocomplete' => 'given-name' ]) . '

' . '

' . form::field('user_displayname', 20, 255, [ 'default' => html::escapeHTML($user_displayname), 'autocomplete' => 'nickname' ]) . '

' . '

' . form::email('user_email', [ 'default' => html::escapeHTML($user_email), 'autocomplete' => 'email' ]) . '

' . '

' . form::url('user_url', [ 'size' => 30, 'default' => html::escapeHTML($user_url), 'autocomplete' => 'url' ]) . '

' . '

' . form::combo('user_lang', $lang_combo, $user_lang, 'l10n') . '

' . '

' . form::combo('user_tz', dt::getZones(true, true), $user_tz) . '

'; if ($core->auth->allowPassChange()) { echo '

' . __('Change my password') . '

' . '
' . '

' . form::password('new_pwd', 20, 255, [ 'extra_html' => 'data-indicator="pwindicator"', 'autocomplete' => 'new-password'] ) . '

' . '
' . '
' . '

' . '
' . '
' . '

' . form::password('new_pwd_c', 20, 255, [ 'autocomplete' => 'new-password'] ) . '

' . '

' . form::password('cur_pwd', 20, 255, [ 'autocomplete' => 'current-password'] ) . '

' . '

' . __('If you have changed your email or password you must provide your current password to save these modifications.') . '

'; } echo '

' . $core->formNonce() . '

' . '
' . '
'; # User options : some from actual user profile, dashboard modules, ... echo '
'; echo '
' . '

' . __('My options') . '

'; echo '
' . '

' . __('Interface') . '

' . '

' . '

' . '

' . '

' . __('If checked, numeric fields will allow to type the elements\' ordering number.') . '

' . '

' . '

' . '

' . '

' . ' ' . form::combo('user_ui_htmlfontsize', $htmlfontsize_combo, $user_ui_htmlfontsize) . '

' . '

' . '

' . __('If checked, font size will vary depending on viewport size (from 12px to 16px with default font size selected).') . '

'; echo '

' . form::number('user_ui_media_by_page', 0, 999, (integer) $user_ui_media_by_page) . '

'; echo '

' . form::number('user_ui_media_nb_last_dirs', 0, 999, (integer) $user_ui_media_nb_last_dirs) . '

' . '

' . __('Leave empty to ignore, displayed only if Javascript is enabled in your browser.') . '

'; if ($core->auth->isSuperAdmin()) { echo '

' . '' . __('This will be applied for all users') . '.' . '

'; //Opera sucks; } echo '
'; echo '
' . '

' . __('Optional columns displayed in lists') . '

'; $odd = true; foreach ($cols as $col_type => $col_list) { echo '
'; echo '
' . $col_list[0] . '
'; foreach ($col_list[1] as $col_name => $col_data) { echo '

'; } echo '

'; $odd = !$odd; } echo '
'; echo '
' . '

' . __('Edition') . '

'; echo '
'; foreach ($format_by_editors as $format => $editors) { echo '

' . form::combo( ['user_editor[' . $format . ']', 'user_editor_' . $format], array_merge([__('Choose an editor') => ''], $editors), $user_options['editor'][$format] ) . '

'; } echo '

' . form::combo('user_post_format', $available_formats, $user_options['post_format']) . '

'; echo '

' . form::combo('user_post_status', $status_combo, $user_post_status) . '

' . '

' . form::number('user_edit_size', 10, 999, (integer) $user_options['edit_size']) . '

' . '

' . '

' . '
'; echo '
'; echo '
' . __('Use xhtml editor for:') . '
'; foreach ($rte as $rk => $rv) { echo '

'; } echo '

'; echo '
'; // fieldset echo '

' . __('Other options') . '

'; # --BEHAVIOR-- adminPreferencesForm $core->callBehavior('adminPreferencesForm', $core); echo '

' . $core->formNonce() . '

' . '
'; echo '
'; # My dashboard echo '
'; $ws = $core->auth->user_prefs->addWorkspace('favorites'); echo '

' . __('My dashboard') . '

'; # Favorites echo '
'; echo '

' . __('My favorites') . '

'; $count = 0; $user_fav = $core->favs->getFavoriteIDs(false); foreach ($user_fav as $id) { $fav = $core->favs->getFavorite($id); if ($fav != false) { // User favorites only if ($count == 0) { echo '
    '; } $count++; echo '
  • ' . '' . '
  • '; } } if ($count > 0) { echo '
'; } if ($count > 0) { echo '
' . '

' . form::hidden('favs_order', '') . $core->formNonce() . ' ' . '

' . ($core->auth->isSuperAdmin() ? '
' . '

' . __('If you are a super administrator, you may define this set of favorites to be used by default on all blogs of this installation.') . '

' . '

' . '

' . '
' : '') . '
'; } else { echo '

' . __('Currently no personal favorites.') . '

'; } $avail_fav = $core->favs->getFavorites($core->favs->getAvailableFavoritesIDs()); $default_fav_ids = []; foreach ($core->favs->getFavoriteIDs(true) as $v) { $default_fav_ids[$v] = true; } echo '
'; # /box my-fav echo '
'; # Available favorites echo '
' . __('Other available favorites') . '
'; $count = 0; uasort($avail_fav, function ($a, $b) { return strcoll( strtolower(dcUtils::removeDiacritics($a['title'])), strtolower(dcUtils::removeDiacritics($b['title']))); }); foreach ($avail_fav as $k => $v) { if (in_array($k, $user_fav)) { unset($avail_fav[$k]); } } foreach ($avail_fav as $k => $fav) { if ($count == 0) { echo '
    '; } $count++; echo '
  • ' . '' . (isset($default_fav_ids[$k]) ? ' ' . __('(default favorite)') . '' : '') . '
  • '; } if ($count > 0) { echo '
'; } echo '

' . $core->formNonce() . '

'; echo '
'; # /available favorites echo '
'; # Dashboard items echo '
' . '
' . '

' . __('Menu') . '

' . '

'; echo '
' . '

' . __('Dashboard icons') . '

' . '

'; if (count($iconsets_combo) > 1) { echo '

' . form::combo('user_ui_iconset', $iconsets_combo, $user_ui_iconset) . '

'; } else { echo ''; } echo '
'; echo '
' . '

' . __('Dashboard modules') . '

' . '

' . '

' . '

'; if ($core->auth->isSuperAdmin()) { echo '

'; } echo '
'; # --BEHAVIOR-- adminDashboardOptionsForm $core->callBehavior('adminDashboardOptionsForm', $core); echo '

' . form::hidden('db-options', '-') . $core->formNonce() . '

' . '
'; # Dashboard items order (reset) echo '
'; echo '

' . __('Dashboard items order') . '

'; echo '

' . $core->formNonce() . '

'; echo '
'; echo '
'; echo '
'; # /multipart-user-favorites dcPage::helpBlock('core_user_pref'); dcPage::close();