summaryrefslogtreecommitdiff
path: root/program
diff options
context:
space:
mode:
authorThomas Bruederli <thomas@roundcube.net>2013-09-28 12:03:20 +0200
committerThomas Bruederli <thomas@roundcube.net>2013-09-28 12:03:20 +0200
commitc49c35ca0fdd4d3972748a8846c0c71f50c80b16 (patch)
tree538c3eb20fefd22a8d2bfba96afe207241a2d1f9 /program
parent85fece2c4dbc6ef36ccd08d32e35501a1d131f81 (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.php2
-rw-r--r--program/steps/settings/func.inc57
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',