From cb3538d2abe1a333bae0d91d6ff221a1ec8cacc2 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Thu, 31 Jul 2008 16:27:46 -0400
Subject: [PATCH] Make special folders configurable for the user

---
 program/include/html.php              |    6 +-
 program/include/main.inc              |   27 +++++++++++++
 program/steps/settings/func.inc       |   26 ++++++++++++-
 program/steps/settings/save_prefs.inc |    4 ++
 4 files changed, 57 insertions(+), 6 deletions(-)

diff --git a/program/include/html.php b/program/include/html.php
index 236dec2..704d10a 100644
--- a/program/include/html.php
+++ b/program/include/html.php
@@ -248,7 +248,7 @@
 {
     protected $tagname = 'input';
     protected $type = 'text';
-    protected $allowed = array('type','name','value','size','tabindex','autocomplete','checked','onchange','onclick');
+    protected $allowed = array('type','name','value','size','tabindex','autocomplete','checked','onchange','onclick','disabled');
 
     public function __construct($attrib = array())
     {
@@ -416,7 +416,7 @@
 class html_textarea extends html
 {
     protected $tagname = 'textarea';
-    protected $allowed = array('name','rows','cols','wrap','tabindex','onchange');
+    protected $allowed = array('name','rows','cols','wrap','tabindex','onchange','disabled');
 
     /**
      * Get HTML code for this object
@@ -473,7 +473,7 @@
 {
     protected $tagname = 'select';
     protected $options = array();
-    protected $allowed = array('name','size','tabindex','autocomplete','multiple','onchange');
+    protected $allowed = array('name','size','tabindex','autocomplete','multiple','onchange','disabled');
     
     /**
      * Add a new option to this drop-down
diff --git a/program/include/main.inc b/program/include/main.inc
index c2a35c6..0a1cf60 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -934,6 +934,31 @@
   }
 
 
+/**
+ * Return the mailboxlist as html_select object
+ *
+ * @param array Named parameters
+ * @return object html_select HTML drop-down object
+ */
+function rcmail_mailbox_select($p = array())
+{
+  global $RCMAIL;
+  
+  $p += array('maxlength' => 100);
+  $a_mailboxes = array();
+  
+  foreach ($RCMAIL->imap->list_mailboxes() as $folder)
+    rcmail_build_folder_tree($a_mailboxes, $folder, $RCMAIL->imap->get_hierarchy_delimiter());
+
+  $select = new html_select($p);
+  
+  if ($p['noselection'])
+    $select->add($p['noselection'], '');
+    
+  rcmail_render_folder_tree_select($a_mailboxes, $mbox, $p['maxlength'], $select);
+  
+  return $select;
+}
 
 
 /**
@@ -981,7 +1006,7 @@
   $out = '';
   foreach ($arrFolders as $key => $folder)
     {
-    $zebra_class = ($nestLevel*$idx)%2 ? 'even' : 'odd';
+    $zebra_class = (($nestLevel+1)*$idx) % 2 == 0 ? 'even' : 'odd';
     $title = null;
 
     if ($folder_class = rcmail_folder_classname($folder['id']))
diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc
index c5f97b2..1b44818 100644
--- a/program/steps/settings/func.inc
+++ b/program/steps/settings/func.inc
@@ -213,9 +213,9 @@
     $table->add(null, $input_htmleditor->show($config['htmleditor']?1:0));
   }
                   
-  if (!empty($config['drafts_mbox']) && !isset($no_override['draft_autosave'])) {
+  if (!isset($no_override['draft_autosave'])) {
     $field_id = 'rcmfd_autosave';
-    $select_autosave = new html_select(array('name' => '_draft_autosave', 'id' => $field_id));
+    $select_autosave = new html_select(array('name' => '_draft_autosave', 'id' => $field_id, 'disabled' => empty($config['drafts_mbox'])));
     $select_autosave->add(rcube_label('never'), 0);
     foreach (array(3, 5, 10) as $i => $min)
       $select_autosave->add(rcube_label(array('name' => 'everynminutes', 'vars' => array('n' => $min))), $min*60);
@@ -226,6 +226,28 @@
 
   $out .= html::tag('fieldset', null, html::tag('legend', null, Q(rcube_label('messagescomposition'))) . $table->show($attrib));
 
+  // Configure special folders
+  if (!isset($no_override['folders'])) {
+    $RCMAIL->imap_init(true);
+    $select = rcmail_mailbox_select(array('noselection' => '---'));
+    
+    $table = new html_table(array('cols' => 2));
+
+    $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")));
+    
+    $table->add('title', Q(rcube_label('sent')));
+    $table->add(null, $select->show($config['sent_mbox'], array('name' => "_sent_mbox")));
+    
+    $table->add('title', Q(rcube_label('junk')));
+    $table->add(null, $select->show($config['junk_mbox'], array('name' => "_junk_mbox")));
+    
+    $table->add('title', Q(rcube_label('trash')));
+    $table->add(null, $select->show($config['trash_mbox'], array('name' => "_trash_mbox")));
+    
+    $out .= html::tag('fieldset', null, html::tag('legend', null, Q(rcube_label('specialfolders'))) . $table->show($attrib));
+  }
+
   $table = new html_table(array('cols' => 2));
 
   if (!isset($no_override['read_when_deleted'])) {
diff --git a/program/steps/settings/save_prefs.inc b/program/steps/settings/save_prefs.inc
index 750b33b..ccd6e5f 100644
--- a/program/steps/settings/save_prefs.inc
+++ b/program/steps/settings/save_prefs.inc
@@ -36,6 +36,10 @@
   'draft_autosave' => isset($_POST['_draft_autosave']) ? intval($_POST['_draft_autosave']) : 0,
   'mdn_requests' => isset($_POST['_mdn_requests']) ? intval($_POST['_mdn_requests']) : 0,
   'skin' => isset($_POST['_skin']) ? get_input_value('_skin', RCUBE_INPUT_POST) : $CONFIG['skin'],
+  'drafts_mbox' => get_input_value('_drafts_mbox', RCUBE_INPUT_POST),
+  'sent_mbox' => get_input_value('_sent_mbox', RCUBE_INPUT_POST),
+  'junk_mbox' => get_input_value('_junk_mbox', RCUBE_INPUT_POST),
+  'trash_mbox' => get_input_value('_trash_mbox', RCUBE_INPUT_POST),
   );
 
 // don't override these parameters

--
Gitblit v1.9.1