diff options
author | Thomas Bruederli <thomas@roundcube.net> | 2013-09-28 12:03:20 +0200 |
---|---|---|
committer | Thomas Bruederli <thomas@roundcube.net> | 2013-09-28 12:03:20 +0200 |
commit | c49c35ca0fdd4d3972748a8846c0c71f50c80b16 (patch) | |
tree | 538c3eb20fefd22a8d2bfba96afe207241a2d1f9 /program | |
parent | 85fece2c4dbc6ef36ccd08d32e35501a1d131f81 (diff) |
Generate settings tabs with a template object 'settingstabs' and let plugins register themselves there using the 'settings_actions' hook
Diffstat (limited to 'program')
-rw-r--r-- | program/include/rcmail_output_html.php | 2 | ||||
-rw-r--r-- | program/steps/settings/func.inc | 57 |
2 files changed, 58 insertions, 1 deletions
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', |