From cb2bc809ef29f349d38c89e202d821e67bb4c947 Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Tue, 21 Sep 2010 14:47:55 -0400 Subject: [PATCH] Fix db_mode check in insert_id() --- program/steps/settings/func.inc | 634 +++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 437 insertions(+), 197 deletions(-) diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc index ba98a2c..c8e46a3 100644 --- a/program/steps/settings/func.inc +++ b/program/steps/settings/func.inc @@ -22,39 +22,144 @@ if (!$OUTPUT->ajax_call) $OUTPUT->set_pagetitle(rcube_label('preferences')); -function rcmail_user_prefs_form($attrib) + +// similar function as /steps/settings/identities.inc::rcmail_identity_frame() +function rcmail_preferences_frame($attrib) { - global $RCMAIL; + global $OUTPUT; - $no_override = array_flip($RCMAIL->config->get('dont_override', array())); - $blocks = $attrib['parts'] ? preg_split('/[\s,;]+/', strip_quotes($attrib['parts'])) : array('general','mailbox','compose','mailview','folders','server'); + if (!$attrib['id']) + $attrib['id'] = 'rcmprefsframe'; - // add some labels to client - $RCMAIL->output->add_label('nopagesizewarning'); - - list($form_start, $form_end) = get_form_tags($attrib, 'save-prefs'); - unset($attrib['form']); + $attrib['name'] = $attrib['id']; - $out = $form_start; - - foreach ($blocks as $part) - $out .= rcmail_user_prefs_block($part, $no_override, $attrib); - - return $out . $form_end; + $OUTPUT->set_env('contentframe', $attrib['name']); + $OUTPUT->set_env('blankpage', $attrib['src'] ? $OUTPUT->abs_url($attrib['src']) : 'program/blank.gif'); + + return html::iframe($attrib); } -function rcmail_user_prefs_block($part, $no_override, $attrib) + +function rcmail_sections_list($attrib) { global $RCMAIL; - $config = $RCMAIL->config->all(); - - switch ($part) - { - // General UI settings - case 'general': - $table = new html_table(array('cols' => 2)); - // show language selection + // add id to message list table if not specified + if (!strlen($attrib['id'])) + $attrib['id'] = 'rcmsectionslist'; + + list($list, $cols) = rcmail_user_prefs(); + + // create XHTML table + $out = rcube_table_output($attrib, $list, $cols, 'id'); + + // set client env + $RCMAIL->output->add_gui_object('sectionslist', $attrib['id']); + $RCMAIL->output->include_script('list.js'); + + return $out; +} + + +function rcmail_identities_list($attrib) +{ + global $OUTPUT, $USER, $RCMAIL; + + // add id to message list table if not specified + if (!strlen($attrib['id'])) + $attrib['id'] = 'rcmIdentitiesList'; + + // get identities list and define 'mail' column + $list = $USER->list_identities(); + foreach ($list as $idx => $row) + $list[$idx]['mail'] = trim($row['name'] . ' <' . $row['email'] .'>'); + + // get all identites from DB and define list of cols to be displayed + $plugin = $RCMAIL->plugins->exec_hook('identities_list', array( + 'list' => $list, + 'cols' => array('mail'))); + + // @TODO: use <UL> instead of <TABLE> for identities list + // create XHTML table + $out = rcube_table_output($attrib, $plugin['list'], $plugin['cols'], 'identity_id'); + + // set client env + $OUTPUT->add_gui_object('identitieslist', $attrib['id']); + + return $out; +} + + +// similar function as in /steps/addressbook/edit.inc +function get_form_tags($attrib, $action, $id = null, $hidden = null) +{ + global $EDIT_FORM, $RCMAIL; + + $form_start = $form_end = ''; + + if (empty($EDIT_FORM)) { + $request_key = $action . (isset($id) ? '.'.$id : ''); + $form_start = $RCMAIL->output->request_form(array( + 'name' => 'form', + 'method' => 'post', + 'task' => $RCMAIL->task, + 'action' => $action, + 'request' => $request_key, + 'noclose' => true + ) + $attrib); + + if (is_array($hidden)) { + $hiddenfields = new html_hiddenfield($hidden); + $form_start .= $hiddenfields->show(); + } + + $form_end = !strlen($attrib['form']) ? '</form>' : ''; + + $EDIT_FORM = !empty($attrib['form']) ? $attrib['form'] : 'form'; + $RCMAIL->output->add_gui_object('editform', $EDIT_FORM); + } + + return array($form_start, $form_end); +} + + +function rcmail_user_prefs($current=null) +{ + global $RCMAIL; + + $sections['general'] = array('id' => 'general', 'section' => rcube_label('uisettings')); + $sections['mailbox'] = array('id' => 'mailbox', 'section' => rcube_label('mailboxview')); + $sections['compose'] = array('id' => 'compose', 'section' => rcube_label('messagescomposition')); + $sections['mailview'] = array('id' => 'mailview','section' => rcube_label('messagesdisplaying')); + $sections['folders'] = array('id' => 'folders', 'section' => rcube_label('specialfolders')); + $sections['server'] = array('id' => 'server', 'section' => rcube_label('serversettings')); + + // hook + define list cols + $plugin = $RCMAIL->plugins->exec_hook('preferences_sections_list', + array('list' => $sections, 'cols' => array('section'))); + + $sections = $plugin['list']; + + $config = $RCMAIL->config->all(); + $no_override = array_flip($RCMAIL->config->get('dont_override', array())); + + foreach ($sections as $idx => $sect) { + + if ($current && $sect['id'] != $current) + continue; + + $blocks = array(); + + switch ($sect['id']) { + // general + case 'general': + + $blocks = array( + 'main' => array('name' => Q(rcube_label('mainoptions'))), + 'list' => array('name' => Q(rcube_label('listoptions'))), + ); + + // language selection if (!isset($no_override['language'])) { $a_lang = $RCMAIL->list_languages(); asort($a_lang); @@ -63,8 +168,10 @@ $select_lang = new html_select(array('name' => '_language', 'id' => $field_id)); $select_lang->add(array_values($a_lang), array_keys($a_lang)); - $table->add('title', html::label($field_id, Q(rcube_label('language')))); - $table->add(null, $select_lang->show($RCMAIL->user->language)); + $blocks['main']['options']['language'] = array( + 'title' => html::label($field_id, Q(rcube_label('language'))), + 'content' => $select_lang->show($RCMAIL->user->language), + ); } // show page size selection @@ -112,8 +219,10 @@ $select_timezone->add('(GMT +13:00) Tonga, Pheonix Islands', '13'); $select_timezone->add('(GMT +14:00) Kiribati', '14'); - $table->add('title', html::label($field_id, Q(rcube_label('timezone')))); - $table->add(null, $select_timezone->show((string)$config['timezone'])); + $blocks['main']['options']['timezone'] = array( + 'title' => html::label($field_id, Q(rcube_label('timezone'))), + 'content' => $select_timezone->show((string)$config['timezone']), + ); } // daylight savings @@ -121,8 +230,10 @@ $field_id = 'rcmfd_dst'; $input_dst = new html_checkbox(array('name' => '_dst_active', 'id' => $field_id, 'value' => 1, 'disabled' => ($config['timezone'] === 'auto'))); - $table->add('title', html::label($field_id, Q(rcube_label('dstactive')))); - $table->add(null, $input_dst->show($config['dst_active'])); + $blocks['main']['options']['dstactive'] = array( + 'title' => html::label($field_id, Q(rcube_label('dstactive'))), + 'content' => $input_dst->show($config['dst_active']), + ); } // MM: Show checkbox for toggling 'pretty dates' @@ -130,8 +241,10 @@ $field_id = 'rcmfd_prettydate'; $input_prettydate = new html_checkbox(array('name' => '_pretty_date', 'id' => $field_id, 'value' => 1)); - $table->add('title', html::label($field_id, Q(rcube_label('prettydate')))); - $table->add(null, $input_prettydate->show($config['prettydate']?1:0)); + $blocks['main']['options']['prettydate'] = array( + 'title' => html::label($field_id, Q(rcube_label('prettydate'))), + 'content' => $input_prettydate->show($config['prettydate']?1:0), + ); } // show page size selection @@ -139,8 +252,10 @@ $field_id = 'rcmfd_pgsize'; $input_pagesize = new html_inputfield(array('name' => '_pagesize', 'id' => $field_id, 'size' => 5)); - $table->add('title', html::label($field_id, Q(rcube_label('pagesize')))); - $table->add(null, $input_pagesize->show($config['pagesize'])); + $blocks['list']['options']['pagesize'] = array( + 'title' => html::label($field_id, Q(rcube_label('pagesize'))), + 'content' => $input_pagesize->show($config['pagesize']), + ); } // show drop-down for available skins @@ -154,36 +269,53 @@ foreach($skins as $skin) $input_skin->add($skin, $skin); - $table->add('title', html::label($field_id, Q(rcube_label('skin')))); - $table->add(null, $input_skin->show($config['skin'])); + $blocks['main']['options']['skin'] = array( + 'title' => html::label($field_id, Q(rcube_label('skin'))), + 'content' => $input_skin->show($config['skin']), + ); } } - - $RCMAIL->plugins->exec_hook('user_preferences', array('section' => $part, 'table' => $table)); - - if ($table->size()) - $out = html::tag('fieldset', null, html::tag('legend', null, Q(rcube_label('uisettings'))) . $table->show($attrib)); + break; + // Mailbox view (mail screen) + case 'mailbox': - // Mailbox view (mail screen) - case 'mailbox': - $table = new html_table(array('cols' => 2)); - - if (!isset($no_override['focus_on_new_message'])) { - $field_id = 'rcmfd_focus_on_new_message'; - $input_focus_on_new_message = new html_checkbox(array('name' => '_focus_on_new_message', 'id' => $field_id, 'value' => 1)); - $table->add('title', html::label($field_id, Q(rcube_label('focusonnewmessage')))); - $table->add(null, $input_focus_on_new_message->show($config['focus_on_new_message']?1:0)); - } + $blocks = array( + 'main' => array('name' => Q(rcube_label('mainoptions'))), + 'new_message' => array('name' => Q(rcube_label('newmessage'))), + ); // show config parameter for preview pane if (!isset($no_override['preview_pane'])) { $field_id = 'rcmfd_preview'; - $input_preview = new html_checkbox(array('name' => '_preview_pane', 'id' => $field_id, 'value' => 1)); + $input_preview = new html_checkbox(array('name' => '_preview_pane', 'id' => $field_id, 'value' => 1, + 'onchange' => JS_OBJECT_NAME.'.toggle_preview_pane(this)')); - $table->add('title', html::label($field_id, Q(rcube_label('previewpane')))); - $table->add(null, $input_preview->show($config['preview_pane']?1:0)); + $blocks['main']['options']['preview_pane'] = array( + 'title' => html::label($field_id, Q(rcube_label('previewpane'))), + 'content' => $input_preview->show($config['preview_pane']?1:0), + ); + } + + // show config parameter for preview pane auto mark as read delay + if (!isset($no_override['preview_pane_mark_read'])) { + // apply default if config option is not set at all + $config['preview_pane_mark_read'] = $RCMAIL->config->get('preview_pane_mark_read', 0); + + $field_id = 'rcmfd_preview_pane_mark_read'; + $select_delay = new html_select(array('name' => '_preview_pane_mark_read', 'id' => $field_id, + 'disabled' => $config['preview_pane']?0:1)); + + $select_delay->add(rcube_label('never'), '-1'); + $select_delay->add(rcube_label('immediately'), 0); + foreach(array(5, 10, 20, 30) as $sec) + $select_delay->add(rcube_label(array('name' => 'afternseconds', 'vars' => array('n' => $sec))), $sec); + + $blocks['main']['options']['preview_pane_mark_read'] = array( + 'title' => html::label($field_id, Q(rcube_label('previewpanemarkread'))), + 'content' => $select_delay->show(intval($config['preview_pane_mark_read'])), + ); } if (!isset($no_override['mdn_requests'])) { @@ -193,8 +325,38 @@ $select_mdn_requests->add(rcube_label('autosend'), 1); $select_mdn_requests->add(rcube_label('ignore'), 2); - $table->add('title', html::label($field_id, Q(rcube_label('mdnrequests')))); - $table->add(null, $select_mdn_requests->show($config['mdn_requests'])); + $blocks['main']['options']['mdn_requests'] = array( + 'title' => html::label($field_id, Q(rcube_label('mdnrequests'))), + 'content' => $select_mdn_requests->show($config['mdn_requests']), + ); + } + + $RCMAIL->imap_connect(); + $threading_supported = $RCMAIL->imap->get_capability('thread=references') + || $RCMAIL->imap->get_capability('thread=orderedsubject') + || $RCMAIL->imap->get_capability('thread=refs'); + + if (!isset($no_override['autoexpand_threads']) && $threading_supported) { + $field_id = 'rcmfd_autoexpand_threads'; + $select_autoexpand_threads = new html_select(array('name' => '_autoexpand_threads', 'id' => $field_id)); + $select_autoexpand_threads->add(rcube_label('never'), 0); + $select_autoexpand_threads->add(rcube_label('do_expand'), 1); + $select_autoexpand_threads->add(rcube_label('expand_only_unread'), 2); + + $blocks['main']['options']['autoexpand_threads'] = array( + 'title' => html::label($field_id, Q(rcube_label('autoexpand_threads'))), + 'content' => $select_autoexpand_threads->show($config['autoexpand_threads']), + ); + } + + if (!isset($no_override['focus_on_new_message'])) { + $field_id = 'rcmfd_focus_on_new_message'; + $input_focus_on_new_message = new html_checkbox(array('name' => '_focus_on_new_message', 'id' => $field_id, 'value' => 1)); + + $blocks['new_message']['options']['focus_on_new_message'] = array( + 'title' => html::label($field_id, Q(rcube_label('focusonnewmessage'))), + 'content' => $input_focus_on_new_message->show($config['focus_on_new_message']?1:0), + ); } if (!isset($no_override['keep_alive'])) { @@ -207,27 +369,30 @@ $select_keep_alive->add(rcube_label(array('name' => 'everynminutes', 'vars' => array('n' => $min))), $min); } - $table->add('title', html::label($field_id, Q(rcube_label('keepalive')))); - $table->add(null, $select_keep_alive->show($config['keep_alive']/60)); + $blocks['new_message']['options']['keep_alive'] = array( + 'title' => html::label($field_id, Q(rcube_label('keepalive'))), + 'content' => $select_keep_alive->show($config['keep_alive']/60), + ); } if (!isset($no_override['check_all_folders'])) { $field_id = 'rcmfd_check_all_folders'; $input_check_all = new html_checkbox(array('name' => '_check_all_folders', 'id' => $field_id, 'value' => 1)); - $table->add('title', html::label($field_id, Q(rcube_label('checkallfolders')))); - $table->add(null, $input_check_all->show($config['check_all_folders']?1:0)); + + $blocks['new_message']['options']['check_all_folders'] = array( + 'title' => html::label($field_id, Q(rcube_label('checkallfolders'))), + 'content' => $input_check_all->show($config['check_all_folders']?1:0), + ); } - $RCMAIL->plugins->exec_hook('user_preferences', array('section' => $part, 'table' => $table)); - - if ($table->size()) - $out = html::tag('fieldset', null, html::tag('legend', null, Q(rcube_label('mailboxview'))) . $table->show($attrib)); break; + // Message viewing + case 'mailview': - // Message viewing - case 'mailview': - $table = new html_table(array('cols' => 2)); + $blocks = array( + 'main' => array('name' => Q(rcube_label('mainoptions'))), + ); // show checkbox for HTML/plaintext messages if (!isset($no_override['prefer_html'])) { @@ -235,8 +400,21 @@ $input_preferhtml = new html_checkbox(array('name' => '_prefer_html', 'id' => $field_id, 'value' => 1, 'onchange' => JS_OBJECT_NAME.'.toggle_prefer_html(this)')); - $table->add('title', html::label($field_id, Q(rcube_label('preferhtml')))); - $table->add(null, $input_preferhtml->show($config['prefer_html']?1:0)); + $blocks['main']['options']['prefer_html'] = array( + 'title' => html::label($field_id, Q(rcube_label('preferhtml'))), + 'content' => $input_preferhtml->show($config['prefer_html']?1:0), + ); + } + + if (!isset($no_override['default_charset'])) { + $field_id = 'rcmfd_default_charset'; + + $blocks['main']['options']['default_charset'] = array( + 'title' => html::label($field_id, Q(rcube_label('defaultcharset'))), + 'content' => $RCMAIL->output->charset_selector(array( + 'name' => '_default_charset', 'selected' => $config['default_charset'] + )) + ); } if (!isset($no_override['show_images'])) { @@ -246,36 +424,52 @@ $input_show_images->add(rcube_label('fromknownsenders'), 1); $input_show_images->add(rcube_label('always'), 2); - $table->add('title', html::label($field_id, Q(rcube_label('showremoteimages')))); - $table->add(null, $input_show_images->show($config['show_images'])); + $blocks['main']['options']['show_images'] = array( + 'title' => html::label($field_id, Q(rcube_label('showremoteimages'))), + 'content' => $input_show_images->show($config['show_images']), + ); } if (!isset($no_override['inline_images'])) { $field_id = 'rcmfd_inline_images'; $input_inline_images = new html_checkbox(array('name' => '_inline_images', 'id' => $field_id, 'value' => 1)); - $table->add('title', html::label($field_id, Q(rcube_label('showinlineimages')))); - $table->add(null, $input_inline_images->show($config['inline_images']?1:0)); + $blocks['main']['options']['inline_images'] = array( + 'title' => html::label($field_id, Q(rcube_label('showinlineimages'))), + 'content' => $input_inline_images->show($config['inline_images']?1:0), + ); } - $RCMAIL->plugins->exec_hook('user_preferences', array('section' => $part, 'table' => $table)); + // "display after delete" checkbox + if (!isset($no_override['display_next'])) { + $field_id = 'rcmfd_displaynext'; + $input_displaynext = new html_checkbox(array('name' => '_display_next', 'id' => $field_id, 'value' => 1)); - if ($table->size()) - $out = html::tag('fieldset', null, html::tag('legend', null, Q(rcube_label('messagesdisplaying'))) . $table->show($attrib)); + $blocks['main']['options']['display_next'] = array( + 'title' => html::label($field_id, Q(rcube_label('displaynext'))), + 'content' => $input_displaynext->show($config['display_next']?1:0), + ); + } + break; + // Mail composition + case 'compose': - // Mail composition - case 'compose': - $table = new html_table(array('cols' => 2)); + $blocks = array( + 'main' => array('name' => Q(rcube_label('mainoptions'))), + 'sig' => array('name' => Q(rcube_label('signatureoptions'))), + ); // Show checkbox for HTML Editor if (!isset($no_override['htmleditor'])) { $field_id = 'rcmfd_htmleditor'; $input_htmleditor = new html_checkbox(array('name' => '_htmleditor', 'id' => $field_id, 'value' => 1)); - $table->add('title', html::label($field_id, Q(rcube_label('htmleditor')))); - $table->add(null, $input_htmleditor->show($config['htmleditor']?1:0)); + $blocks['main']['options']['htmleditor'] = array( + 'title' => html::label($field_id, Q(rcube_label('htmleditor'))), + 'content' => $input_htmleditor->show($config['htmleditor']?1:0), + ); } if (!isset($no_override['draft_autosave'])) { @@ -285,8 +479,10 @@ foreach (array(1, 3, 5, 10) as $i => $min) $select_autosave->add(rcube_label(array('name' => 'everynminutes', 'vars' => array('n' => $min))), $min*60); - $table->add('title', html::label($field_id, Q(rcube_label('autosavedraft')))); - $table->add(null, $select_autosave->show($config['draft_autosave'])); + $blocks['main']['options']['draft_autosave'] = array( + 'title' => html::label($field_id, Q(rcube_label('autosavedraft'))), + 'content' => $select_autosave->show($config['draft_autosave']), + ); } if (!isset($no_override['mime_param_folding'])) { @@ -296,72 +492,146 @@ $select_param_folding->add(rcube_label('miscfolding'), 1); $select_param_folding->add(rcube_label('2047folding'), 2); - $table->set_row_attribs('advanced'); - $table->add('title', html::label($field_id, Q(rcube_label('mimeparamfolding')))); - $table->add(null, $select_param_folding->show($config['mime_param_folding'])); + $blocks['main']['options']['mime_param_folding'] = array( + 'advanced' => true, + 'title' => html::label($field_id, Q(rcube_label('mimeparamfolding'))), + 'content' => $select_param_folding->show($config['mime_param_folding']), + ); } - $RCMAIL->plugins->exec_hook('user_preferences', array('section' => $part, 'table' => $table)); + if (!isset($no_override['force_7bit'])) { + $field_id = 'rcmfd_force_7bit'; + $input_7bit = new html_checkbox(array('name' => '_force_7bit', 'id' => $field_id, 'value' => 1)); - if ($table->size()) - $out = html::tag('fieldset', null, html::tag('legend', null, Q(rcube_label('messagescomposition'))) . $table->show($attrib)); + $blocks['main']['options']['force_7bit'] = array( + 'title' => html::label($field_id, Q(rcube_label('force7bit'))), + 'content' => $input_7bit->show($config['force_7bit']?1:0), + ); + } + + if (!isset($no_override['top_posting'])) { + $field_id = 'rcmfd_top_posting'; + $select_replymode = new html_select(array('name' => '_top_posting', 'id' => $field_id, 'onchange' => "\$('#rcmfd_sig_above').attr('disabled',this.selectedIndex==0)")); + $select_replymode->add(rcube_label('replybottomposting'), 0); + $select_replymode->add(rcube_label('replytopposting'), 1); + + $blocks['main']['options']['top_posting'] = array( + 'title' => html::label($field_id, Q(rcube_label('whenreplying'))), + 'content' => $select_replymode->show($config['top_posting']?1:0), + ); + } + + if (!isset($no_override['show_sig'])) { + $field_id = 'rcmfd_show_sig'; + $select_show_sig = new html_select(array('name' => '_show_sig', 'id' => $field_id)); + $select_show_sig->add(rcube_label('never'), 0); + $select_show_sig->add(rcube_label('always'), 1); + $select_show_sig->add(rcube_label('newmessageonly'), 2); + $select_show_sig->add(rcube_label('replyandforwardonly'), 3); + + $blocks['sig']['options']['show_sig'] = array( + 'title' => html::label($field_id, Q(rcube_label('autoaddsignature'))), + 'content' => $select_show_sig->show($RCMAIL->config->get('show_sig', 1)), + ); + } + + if (!isset($no_override['sig_above'])) { + $field_id = 'rcmfd_sig_above'; + $select_sigabove = new html_select(array('name' => '_sig_above', 'id' => $field_id, 'disabled' => !$config['top_posting'])); + $select_sigabove->add(rcube_label('belowquote'), 0); + $select_sigabove->add(rcube_label('abovequote'), 1); + + $blocks['sig']['options']['sig_above'] = array( + 'title' => html::label($field_id, Q(rcube_label('replysignaturepos'))), + 'content' => $select_sigabove->show($config['sig_above']?1:0), + ); + } + + if (!isset($no_override['strip_existing_sig'])) { + $field_id = 'rcmfd_strip_existing_sig'; + $input_stripexistingsig = new html_checkbox(array('name' => '_strip_existing_sig', 'id' => $field_id, 'value' => 1)); + + $blocks['sig']['options']['strip_existing_sig'] = array( + 'title' => html::label($field_id, Q(rcube_label('replyremovesignature'))), + 'content' => $input_stripexistingsig->show($config['strip_existing_sig']?1:0), + ); + } + break; + // Special IMAP folders + case 'folders': - // Special IMAP folders - case 'folders': + $blocks = array( + 'main' => array('name' => Q(rcube_label('mainoptions'))), + ); + // Configure special folders if (!isset($no_override['default_imap_folders'])) { - $RCMAIL->imap_init(true); - $select = rcmail_mailbox_select(array('noselection' => '---', 'realnames' => true, 'maxlength' => 30)); - $table = new html_table(array('cols' => 2)); + $RCMAIL->imap_connect(); - if (!isset($no_override['drafts_mbox'])) { - $table->add('title', Q(rcube_label('drafts'))); - $table->add(null, $select->show($config['drafts_mbox'], array('name' => "_drafts_mbox", 'onchange' => "document.getElementById('rcmfd_autosave').disabled=this.selectedIndex==0"))); + // load folders list only when needed + if ($current) { + $select = rcmail_mailbox_select(array('noselection' => '---', 'realnames' => true, + 'maxlength' => 30, 'exceptions' => array('INBOX'))); } + else // dummy select + $select = new html_select(); - if (!isset($no_override['sent_mbox'])) { - $table->add('title', Q(rcube_label('sent'))); - $table->add(null, $select->show($config['sent_mbox'], array('name' => "_sent_mbox"))); - } + if (!isset($no_override['drafts_mbox'])) + $blocks['main']['options']['drafts_mbox'] = array( + 'title' => Q(rcube_label('drafts')), + 'content' => $select->show($config['drafts_mbox'], array('name' => "_drafts_mbox")), + ); - if (!isset($no_override['junk_mbox'])) { - $table->add('title', Q(rcube_label('junk'))); - $table->add(null, $select->show($config['junk_mbox'], array('name' => "_junk_mbox"))); - } + if (!isset($no_override['sent_mbox'])) + $blocks['main']['options']['sent_mbox'] = array( + 'title' => Q(rcube_label('sent')), + 'content' => $select->show($config['sent_mbox'], array('name' => "_sent_mbox")), + ); - if (!isset($no_override['trash_mbox'])) { - $table->add('title', Q(rcube_label('trash'))); - $table->add(null, $select->show($config['trash_mbox'], array('name' => "_trash_mbox"))); - } + if (!isset($no_override['junk_mbox'])) + $blocks['main']['options']['junk_mbox'] = array( + 'title' => Q(rcube_label('junk')), + 'content' => $select->show($config['junk_mbox'], array('name' => "_junk_mbox")), + ); - $RCMAIL->plugins->exec_hook('user_preferences', array('section' => $part, 'table' => $table)); - - $out = html::tag('fieldset', null, html::tag('legend', null, Q(rcube_label('specialfolders'))) . $table->show($attrib)); + if (!isset($no_override['trash_mbox'])) + $blocks['main']['options']['trash_mbox'] = array( + 'title' => Q(rcube_label('trash')), + 'content' => $select->show($config['trash_mbox'], array('name' => "_trash_mbox")), + ); } + break; + // Server settings + case 'server': - // Server settings - case 'server': - $table = new html_table(array('cols' => 2)); + $blocks = array( + 'main' => array('name' => Q(rcube_label('mainoptions'))), + 'maintenance' => array('name' => Q(rcube_label('maintenance'))), + ); if (!isset($no_override['read_when_deleted'])) { $field_id = 'rcmfd_read_deleted'; $input_readdeleted = new html_checkbox(array('name' => '_read_when_deleted', 'id' => $field_id, 'value' => 1)); - $table->add('title', html::label($field_id, Q(rcube_label('readwhendeleted')))); - $table->add(null, $input_readdeleted->show($config['read_when_deleted']?1:0)); + $blocks['main']['options']['read_when_deleted'] = array( + 'title' => html::label($field_id, Q(rcube_label('readwhendeleted'))), + 'content' => $input_readdeleted->show($config['read_when_deleted']?1:0), + ); } if (!isset($no_override['flag_for_deletion'])) { $field_id = 'rcmfd_flag_for_deletion'; $input_flagfordeletion = new html_checkbox(array('name' => '_flag_for_deletion', 'id' => $field_id, 'value' => 1)); - $table->add('title', html::label($field_id, Q(rcube_label('flagfordeletion')))); - $table->add(null, $input_flagfordeletion->show($config['flag_for_deletion']?1:0)); + $blocks['main']['options']['flag_for_deletion'] = array( + 'title' => html::label($field_id, Q(rcube_label('flagfordeletion'))), + 'content' => $input_flagfordeletion->show($config['flag_for_deletion']?1:0), + ); } // don't show deleted messages @@ -369,8 +639,20 @@ $field_id = 'rcmfd_skip_deleted'; $input_purge = new html_checkbox(array('name' => '_skip_deleted', 'id' => $field_id, 'value' => 1)); - $table->add('title', html::label($field_id, Q(rcube_label('skipdeleted')))); - $table->add(null, $input_purge->show($config['skip_deleted']?1:0)); + $blocks['main']['options']['skip_deleted'] = array( + 'title' => html::label($field_id, Q(rcube_label('skipdeleted'))), + 'content' => $input_purge->show($config['skip_deleted']?1:0), + ); + } + + if (!isset($no_override['delete_always'])) { + $field_id = 'rcmfd_delete_always'; + $input_delete_always = new html_checkbox(array('name' => '_delete_always', 'id' => $field_id, 'value' => 1)); + + $blocks['main']['options']['delete_always'] = array( + 'title' => html::label($field_id, Q(rcube_label('deletealways'))), + 'content' => $input_delete_always->show($config['delete_always']?1:0), + ); } // Trash purging on logout @@ -378,8 +660,10 @@ $field_id = 'rcmfd_logout_purge'; $input_purge = new html_checkbox(array('name' => '_logout_purge', 'id' => $field_id, 'value' => 1)); - $table->add('title', html::label($field_id, Q(rcube_label('logoutclear')))); - $table->add(null, $input_purge->show($config['logout_purge']?1:0)); + $blocks['maintenance']['options']['logout_purge'] = array( + 'title' => html::label($field_id, Q(rcube_label('logoutclear'))), + 'content' => $input_purge->show($config['logout_purge']?1:0), + ); } // INBOX compacting on logout @@ -387,107 +671,63 @@ $field_id = 'rcmfd_logout_expunge'; $input_expunge = new html_checkbox(array('name' => '_logout_expunge', 'id' => $field_id, 'value' => 1)); - $table->add('title', html::label($field_id, Q(rcube_label('logoutcompact')))); - $table->add(null, $input_expunge->show($config['logout_expunge']?1:0)); + $blocks['maintenance']['options']['logout_expunge'] = array( + 'title' => html::label($field_id, Q(rcube_label('logoutcompact'))), + 'content' => $input_expunge->show($config['logout_expunge']?1:0), + ); } - $RCMAIL->plugins->exec_hook('user_preferences', array('section' => $part, 'table' => $table)); - - if ($table->size()) - $out = html::tag('fieldset', null, html::tag('legend', null, Q(rcube_label('serversettings'))) . $table->show($attrib)); break; + } + $data = $RCMAIL->plugins->exec_hook('preferences_list', array('section' => $sect['id'], 'blocks' => $blocks)); + $found = false; - default: - $out = ''; + // create output + foreach ($data['blocks'] as $block) { + if (!empty($block['content']) || !empty($block['options'])) { + $found = true; + break; + } + } + + if (!$found) + unset($sections[$idx]); + else + $sections[$idx]['blocks'] = $data['blocks']; } - - return $out; + + return array($sections, $plugin['cols']); } -function rcmail_identities_list($attrib) - { - global $OUTPUT, $USER, $RCMAIL; - - // add id to message list table if not specified - if (!strlen($attrib['id'])) - $attrib['id'] = 'rcmIdentitiesList'; - - // get all identites from DB and define list of cols to be displayed - $plugin = $RCMAIL->plugins->exec_hook('list_identities', array( - 'list' => $USER->list_identities(), - 'cols' => array('name', 'email'))); - - // create XHTML table - $out = rcube_table_output($attrib, $plugin['list'], $plugin['cols'], 'identity_id'); - - // set client env - $OUTPUT->add_gui_object('identitieslist', $attrib['id']); - - return $out; - } - - - -// similar function as in /steps/addressbook/edit.inc -function get_form_tags($attrib, $action, $add_hidden=array()) - { - global $EDIT_FORM, $RCMAIL; - - $form_start = ''; - if (!strlen($EDIT_FORM)) - { - $hiddenfields = new html_hiddenfield(array('name' => '_task', 'value' => $RCMAIL->task)); - $hiddenfields->add(array('name' => '_action', 'value' => $action)); - - if ($add_hidden) - $hiddenfields->add($add_hidden); - - $form_start = !strlen($attrib['form']) ? $RCMAIL->output->form_tag(array('name' => "form", 'method' => "post")) : ''; - $form_start .= $hiddenfields->show(); - } - - $form_end = (!strlen($EDIT_FORM) && !strlen($attrib['form'])) ? '</form>' : ''; - $form_name = strlen($attrib['form']) ? $attrib['form'] : 'form'; - - if (!strlen($EDIT_FORM)) - $RCMAIL->output->add_gui_object('editform', $form_name); - - $EDIT_FORM = $form_name; - - return array($form_start, $form_end); - } - function rcmail_get_skins() - { +{ $path = 'skins'; $skins = array(); $dir = opendir($path); - + if (!$dir) return false; - + while (($file = readdir($dir)) !== false) - { + { $filename = $path.'/'.$file; - if (is_dir($filename) && is_readable($filename) - && !in_array($file, array('.', '..', '.svn'))) + if (!preg_match('/^\./', $file) && is_dir($filename) && is_readable($filename)) $skins[] = $file; - } + } closedir($dir); return $skins; - } +} // register UI objects $OUTPUT->add_handlers(array( - 'userprefs' => 'rcmail_user_prefs_form', + 'prefsframe' => 'rcmail_preferences_frame', + 'sectionslist' => 'rcmail_sections_list', 'identitieslist' => 'rcmail_identities_list', - 'itentitieslist' => 'rcmail_identities_list' // keep this for backward compatibility )); -?> -- Gitblit v1.9.1