diff --git a/program/include/rcmail_output_html.php b/program/include/rcmail_output_html.php index 6db559358..7cab3725e 100644 --- a/program/include/rcmail_output_html.php +++ b/program/include/rcmail_output_html.php @@ -1055,7 +1055,7 @@ class rcmail_output_html extends rcmail_output // these commands can be called directly via url $a_static_commands = array('compose', 'list', 'preferences', 'folders', 'identities'); - if (!($attrib['command'] || $attrib['name'])) { + if (!($attrib['command'] || $attrib['name'] || $attrib['href'])) { return ''; } diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc index f1170178d..af278e5fa 100644 --- a/program/steps/settings/func.inc +++ b/program/steps/settings/func.inc @@ -1246,9 +1246,66 @@ function rcmail_update_folder_row($name, $oldname=null, $subscribe=false, $class $name_utf8, $display_name, $protected, $class_name); } +/** + * Render the list of settings sections (AKA tabs) + */ +function rcmail_settings_tabs($attrib) +{ + global $RCMAIL, $OUTPUT; + + // add default attributes + $attrib += array('tagname' => 'span', 'idprefix' => 'settingstab', 'selclass' => 'selected'); + + $default_actions = array( + array('command' => 'preferences', 'type' => 'link', 'label' => 'preferences', 'title' => 'editpreferences'), + array('command' => 'folders', 'type' => 'link', 'label' => 'folders', 'title' => 'managefolders'), + array('command' => 'identities', 'type' => 'link', 'label' => 'identities', 'title' => 'manageidentities'), + ); + + // get all identites from DB and define list of cols to be displayed + $plugin = $RCMAIL->plugins->exec_hook('settings_actions', array( + 'actions' => $default_actions, + 'attrib' => $attrib, + )); + + $attrib = $plugin['attrib']; + $tagname = $attrib['tagname']; + $tabs = array(); + + foreach ($plugin['actions'] as $k => $action) { + if (!$action['command'] && !$action['href'] && $action['action']) { + $action['href'] = $RCMAIL->url(array('_action' => $action['action'])); + } + + $button = $OUTPUT->button($action); + $attr = $attrib; + + $cmd = $action['action'] ? $action['action'] : $action['command']; + $id = $action['id'] ? $action['id'] : $cmd; + if (!empty($id)) { + $attr['id'] = preg_replace('/[^a-z0-9]/i', '', $attrib['idprefix'] . $id); + } + $classnames = array($attrib['class']); + if (!empty($action['class'])) { + $classnames[] = $action['class']; + } + else if (!empty($cmd)) { + $classnames[] = $cmd; + } + if ($RCMAIL->action == $cmd) { + $classnames[] = $attrib['selclass']; + } + $attr['class'] = join(' ', $classnames); + $tabs[] = html::tag($tagname, $attr, $button, html::$common_attrib); + } + + return join('', $tabs); +} + // register UI objects $OUTPUT->add_handlers(array( + 'settingstabs' => 'rcmail_settings_tabs', 'prefsframe' => 'rcmail_preferences_frame', 'sectionslist' => 'rcmail_sections_list', 'identitieslist' => 'rcmail_identities_list', diff --git a/skins/classic/functions.js b/skins/classic/functions.js index af561c37b..4ad13136f 100644 --- a/skins/classic/functions.js +++ b/skins/classic/functions.js @@ -10,7 +10,7 @@ function rcube_init_settings_tabs() { var el, cl, container = $('#tabsbar'), last_tab = $('span:last', container), - tab = '#settingstabdefault', + tab = '#settingstabpreferences', action = window.rcmail && rcmail.env.action ? rcmail.env.action : null; // move About tab to the end @@ -22,7 +22,7 @@ function rcube_init_settings_tabs() // get selected tab if (action) - tab = '#settingstab' + (action == 'preferences' ? 'default' : (action.indexOf('identity')>0 ? 'identities' : action.replace(/\./g, ''))); + tab = '#settingstab' + (action.indexOf('identity')>0 ? 'identities' : action.replace(/\./g, '')); $(tab).addClass('tablink-selected'); $('a', tab).removeAttr('onclick').click(function() { return false; }); diff --git a/skins/classic/includes/settingstabs.html b/skins/classic/includes/settingstabs.html index 0aea80b67..a47db2274 100644 --- a/skins/classic/includes/settingstabs.html +++ b/skins/classic/includes/settingstabs.html @@ -1,8 +1,6 @@