DIMP now honors the 'allow_resume_all' configuration option
authorMichael M Slusarz <slusarz@curecanti.org>
Fri, 5 Mar 2010 19:07:37 +0000 (12:07 -0700)
committerMichael M Slusarz <slusarz@curecanti.org>
Fri, 5 Mar 2010 19:09:22 +0000 (12:09 -0700)
imp/docs/CHANGES
imp/js/DimpBase.js
imp/lib/Ui/Mailbox.php
imp/lib/Views/ListMessages.php
imp/message.php
imp/templates/index/index-dimp.inc
imp/themes/dimp/screen.css
imp/themes/silver/dimp/screen.css

index 4bb2093..24c1e9e 100644 (file)
@@ -2,6 +2,7 @@
 v5.0-git
 --------
 
+[mms] DIMP now honors the 'allow_resume_all' configuration option.
 [mms] Remove 'sort_limit' configuration option.
 [mms] Mobile view no longer supports WML output.
 [jan] Implement iTip viewer actions in DIMP (Request #8061).
index 9b8d201..2a10dc4 100644 (file)
@@ -546,7 +546,7 @@ var DimpBase = {
 
             e.memo.each(function(row) {
                 // Add context menu
-                this._addMouseEvents({ id: row.VP_domid, type: row.menutype });
+                this._addMouseEvents({ id: row.VP_domid, type: 'message' });
                 new Drag(row.VP_domid, this._msgDragConfig);
             }, this);
 
@@ -590,10 +590,7 @@ var DimpBase = {
                 }
 
                 /* Read-only changes. 'oa_setflag' is handled elsewhere. */
-                tmp = [ $('button_deleted') ].compact().invoke('up', 'SPAN');
-                [ 'ctx_message_', 'ctx_draft_' ].each(function(c) {
-                    tmp = tmp.concat($(c + 'deleted', c + 'setflag', c + 'undeleted'));
-                });
+                tmp = [ $('button_deleted') ].compact().invoke('up', 'SPAN').concat($('ctx_message_deleted', 'ctx_message_setflag', 'ctx_message_undeleted'));
 
                 if (this.viewport.getMetaData('readonly')) {
                     tmp.compact().invoke('hide');
@@ -612,7 +609,7 @@ var DimpBase = {
             /* Context menu: generate the list of settable flags for this
              * mailbox. */
             flags = this.viewport.getMetaData('flags');
-            $('ctx_draft_setflag', 'ctx_message_setflag', 'oa_setflag').invoke('up').invoke(flags.size() ? 'show' : 'hide');
+            $('ctx_message_setflag', 'oa_setflag').invoke('up').invoke(flags.size() ? 'show' : 'hide');
             if (flags.size()) {
                 $('ctx_flag').childElements().each(function(c) {
                     [ c ].invoke(flags.include(c.readAttribute('flag')) ? 'show' : 'hide');
@@ -785,7 +782,6 @@ var DimpBase = {
             this.blacklist(id == 'ctx_message_blacklist');
             break;
 
-        case 'ctx_draft_deleted':
         case 'ctx_message_deleted':
             this.deleteMsg();
             break;
@@ -801,7 +797,7 @@ var DimpBase = {
             }, this);
             break;
 
-        case 'ctx_draft_resume':
+        case 'ctx_message_resume':
             this.composeMailbox('resume');
             break;
 
@@ -836,7 +832,6 @@ var DimpBase = {
             this.blacklist(id == 'oa_blacklist');
             break;
 
-        case 'ctx_draft_undeleted':
         case 'ctx_message_undeleted':
         case 'oa_undeleted':
             this.flag('\\deleted', false);
@@ -976,6 +971,8 @@ var DimpBase = {
 
         case 'ctx_message':
             [ $('ctx_message_source').up() ].invoke(DIMP.conf.preview_pref ? 'hide' : 'show');
+            sel = this.viewport.getSelected();
+            [ $('ctx_message_resume') ].invoke(sel.size() == 1 && sel.get('dataob').first().draft ? 'show' : 'hide');
             break;
 
         default:
@@ -1917,9 +1914,11 @@ var DimpBase = {
 
         if (elt) {
             tmp = this.viewport.createSelection('domid', elt.identify()).get('dataob').first();
-            tmp.draft
-                ? DimpCore.compose('resume', { folder: tmp.view, uid: tmp.imapuid })
-                : this.msgWindow(tmp);
+            if (tmp.draft && this.viewport.getMetaData('drafts')) {
+                DimpCore.compose('resume', { folder: tmp.view, uid: tmp.imapuid })
+            } else {
+                this.msgWindow(tmp);
+            }
             e.stop();
         }
     },
@@ -2956,7 +2955,7 @@ var DimpBase = {
         if ($('ctx_forward')) {
             DM.addSubMenu('ctx_message_forward', 'ctx_forward');
         }
-        [ 'ctx_message_', 'oa_', 'ctx_draft_' ].each(function(i) {
+        [ 'ctx_message_', 'oa_' ].each(function(i) {
             if ($(i + 'setflag')) {
                 DM.addSubMenu(i + 'setflag', 'ctx_flag');
                 DM.addSubMenu(i + 'unsetflag', 'ctx_flag');
index e7c33c2..c36c196 100644 (file)
@@ -256,4 +256,18 @@ class IMP_Ui_Mailbox
         return empty($new_subject) ? $subject : $new_subject;
     }
 
+    /**
+     * Determines if a message is a draft and can be resumed.
+     *
+     * @param array $flags  The list of IMAP flags.
+     *
+     * @return boolean  True if the message is a draft.
+     */
+    public function isDraft($flags = array())
+    {
+        return in_array('\\draft', $flags) ||
+               !empty($GLOBALS['conf']['user']['allow_resume_all']) ||
+               ($this->_mailbox == IMP::folderPref($GLOBALS['prefs']->getValue('drafts_folder'), true));
+    }
+
 }
index 9db9449..3b73f9b 100644 (file)
@@ -119,6 +119,9 @@ class IMP_Views_ListMessages
         if ($args['initial']) {
             if (IMP::isSpecialFolder($mbox)) {
                 $md->special = 1;
+                if ($mbox == IMP::folderPref($GLOBALS['prefs']->getValue('drafts_folder'))) {
+                    $md->drafts = 1;
+                }
             }
             if ($is_search) {
                 $md->search = 1;
@@ -370,7 +373,6 @@ class IMP_Views_ListMessages
             /* Initialize the header fields. */
             $msg = array(
                 'imapuid' => intval($ob['uid']),
-                'menutype' => 'message',
                 'view' => $ob['mailbox'],
             );
 
@@ -397,9 +399,8 @@ class IMP_Views_ListMessages
                 }
             }
 
-            /* Specific flag checking. */
-            if (in_array('\\draft', $ob['flags'])) {
-                $msg['menutype'] = 'draft';
+            /* Drafts. */
+            if ($imp_ui->isDraft($ob['flags'])) {
                 $msg['draft'] = 1;
             }
 
index ea76b3e..042d78c 100644 (file)
@@ -513,10 +513,7 @@ if (!empty($conf['user']['allow_view_source'])) {
     $a_template->set('view_source', $imp_contents->linkViewJS($imp_contents->getMIMEMessage(), 'view_source', _("_Message Source"), array('jstext' => _("Message Source"), 'css' => 'widget', 'widget' => true)));
 }
 
-if (!$disable_compose &&
-    (in_array('\\draft', $flags) ||
-     !empty($conf['user']['allow_resume_all']) ||
-     ($mailbox_name == IMP::folderPref($prefs->getValue('drafts_folder'), true)))) {
+if (!$disable_compose && $imp_ui->isDraft($flags)) {
     $a_template->set('resume', Horde::widget(IMP::composeLink(array(), array('actionID' => 'draft') + $compose_params), _("Resume"), 'widget', '', '', _("Resume"), true));
 }
 
index 6c15d88..dca5bde 100644 (file)
@@ -364,6 +364,7 @@ function _simpleButton($id, $text, $image, $nodisplay = false)
 </div>
 
 <div class="context" id="ctx_message" style="display:none">
+ <a id="ctx_message_resume" style="display:none"><span class="contextImg"></span><?php echo _("Resume Draft") ?></a>
  <a id="ctx_message_reply"><span class="contextImg"></span><?php echo _("Reply") ?></a>
  <a id="ctx_message_forward"><span class="contextImg"></span><?php echo _("Forward") ?></a>
 <?php if (!empty($flag_list)): ?>
@@ -396,22 +397,6 @@ function _simpleButton($id, $text, $image, $nodisplay = false)
  </div>
 </div>
 
-<div class="context" id="ctx_draft" style="display:none">
- <a id="ctx_draft_resume"><span class="contextImg"></span><?php echo _("Resume Draft") ?></a>
-<?php if (!empty($flag_list)): ?>
- <div>
-  <div class="sep"></div>
-  <a id="ctx_draft_setflag"><span class="contextImg"></span><?php echo _("Mark as") ?></a>
-  <a id="ctx_draft_unsetflag"><span class="contextImg"></span><?php echo _("Unmark as") ?></a>
- </div>
-<?php endif; ?>
- <div class="sep"></div>
- <a id="ctx_draft_deleted"><span class="contextImg"></span><?php echo _("Delete") ?></a>
-<?php if (!$usetrash): ?>
- <a id="ctx_draft_undeleted"><span class="contextImg"></span><?php echo _("Undelete") ?></a>
-<?php endif; ?>
-</div>
-
 <div class="context" id="ctx_reply" style="display:none;">
  <a id="ctx_reply_reply"><span class="contextImg"></span><?php echo _("To Sender") ?></a>
  <a id="ctx_reply_reply_all"><span class="contextImg"></span><?php echo _("To All") ?></a>
index f8385fa..023a8f4 100644 (file)
@@ -904,10 +904,10 @@ span.dimpactionDrafts {
 #ctx_message_forward span.contextImg, #ctx_forward_attach span.contextImg, #ctx_forward_body span.contextImg, #ctx_forward_both span.contextImg {
     background-image: url("../graphics/forward.png");
 }
-#ctx_folder_empty span.contextImg, #ctx_message_deleted span.contextImg, #ctx_draft_deleted span.contextImg, #oa_purge_deleted span.contextImg {
+#ctx_folder_empty span.contextImg, #ctx_message_deleted span.contextImg, #oa_purge_deleted span.contextImg {
     background-image: url("../graphics/delete.png");
 }
-#ctx_message_undeleted span.contextImg, #ctx_draft_undeleted span.contextImg, #oa_undeleted span.contextImg {
+#ctx_message_undeleted span.contextImg, #oa_undeleted span.contextImg {
     background-image: url("../graphics/undelete.png");
 }
 #ctx_folder_seen span.contextImg {
@@ -916,16 +916,16 @@ span.dimpactionDrafts {
 #ctx_folder_unseen span.contextImg, #ctx_folder_poll span.contextImg, #ctx_folder_nopoll span.contextImg {
     background-image: url("../graphics/mail_unseen.png");
 }
-#ctx_message_setflag span.contextImg, #ctx_draft_setflag span.contextImg, #oa_setflag span.contextImg, #ctx_folder_setflag span.contextImg {
+#ctx_message_setflag span.contextImg, #oa_setflag span.contextImg, #ctx_folder_setflag span.contextImg {
     background-image: url("../graphics/mail_flagged.png");
 }
-#ctx_message_unsetflag span.contextImg, #ctx_draft_unsetflag span.contextImg, #oa_unsetflag span.contextImg {
+#ctx_message_unsetflag span.contextImg, #oa_unsetflag span.contextImg {
     background-image: url("../graphics/mail_clearflag.png");
 }
 #ctx_message_source span.contextImg, #msg_view_source span.iconImg {
     background-image: url("../graphics/message_source.png");
 }
-#ctx_draft_resume span.contextImg {
+#ctx_message_resume span.contextImg {
     background-image: url("../graphics/mail_draft.png");
 }
 #oa_preview_hide span.contextImg, #oa_preview_show span.contextImg {
index 7629988..89f744d 100644 (file)
@@ -85,10 +85,10 @@ span.dimpactionDrafts {
 #ctx_message_forward span.contextImg, #ctx_forward_attach span.contextImg, #ctx_forward_body span.contextImg, #ctx_forward_both span.contextImg {
     background-image: url("../graphics/forward.png");
 }
-#ctx_folder_empty span.contextImg, #ctx_message_deleted span.contextImg, #ctx_draft_deleted span.contextImg, #oa_purge_deleted span.contextImg {
+#ctx_folder_empty span.contextImg, #ctx_message_deleted span.contextImg, #oa_purge_deleted span.contextImg {
     background-image: url("../graphics/delete.png");
 }
-#ctx_message_undeleted span.contextImg, #ctx_draft_undeleted span.contextImg, #oa_undeleted span.contextImg {
+#ctx_message_undeleted span.contextImg, #oa_undeleted span.contextImg {
     background-image: url("../graphics/undelete.png");
 }
 #ctx_folder_seen span.contextImg {
@@ -97,13 +97,13 @@ span.dimpactionDrafts {
 #ctx_folder_unseen span.contextImg, #ctx_folder_poll span.contextImg, #ctx_folder_nopoll span.contextImg {
     background-image: url("../graphics/mail_unseen.png");
 }
-#ctx_message_setflag span.contextImg, #ctx_draft_setflag span.contextImg, #oa_setflag span.contextImg, #ctx_folder_setflag span.contextImg {
+#ctx_message_setflag span.contextImg, #oa_setflag span.contextImg, #ctx_folder_setflag span.contextImg {
     background-image: url("../graphics/mail_flagged.png");
 }
-#ctx_message_unsetflag span.contextImg, #ctx_draft_unsetflag span.contextImg, #oa_unsetflag span.contextImg {
+#ctx_message_unsetflag span.contextImg, #oa_unsetflag span.contextImg {
     background-image: url("../graphics/mail_clearflag.png");
 }
-#ctx_draft_resume span.contextImg {
+#ctx_message_resume span.contextImg {
     background-image: url("../graphics/mail_draft.png");
 }
 #oa_preview_hide span.contextImg, #oa_preview_show span.contextImg {