From 069704b170c9b9bd29f2d8f9151b8dbaa44400ae Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Thu, 11 Jun 2009 14:07:35 -0400
Subject: [PATCH] - Added message Edit feature (#1483891, #1484440) - need icon

---
 CHANGELOG                               |    1 +
 program/steps/mail/compose.inc          |   14 ++++++++------
 skins/default/mail.css                  |    1 +
 skins/default/includes/messagemenu.html |    1 +
 program/js/app.js                       |   16 ++++++++++------
 5 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 7b98465..f7e8739 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG RoundCube Webmail
 ===========================
 
+- Added message Edit feature (#1483891, #1484440)
 - Fix message Etag generation for counter issues (#1485623)
 - Fix messages searching on MailEnable IMAP (#1485762)
 - Fixed many 'skip_deleted' issues (#1485634)
diff --git a/program/js/app.js b/program/js/app.js
index 2831e3d..218351c 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -189,7 +189,7 @@
         if (this.env.action=='show' || this.env.action=='preview')
           {
           this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete',
-	    'open', 'mark', 'viewsource', 'download', 'print', 'load-attachment', 'load-headers', true);
+	    'open', 'mark', 'edit', 'viewsource', 'download', 'print', 'load-attachment', 'load-headers', true);
 
           if (this.env.next_uid)
             {
@@ -691,6 +691,10 @@
           this.load_contact(cid, 'edit');
         else if (this.task=='settings' && props)
           this.load_identity(props, 'edit-identity');
+        else if (this.task=='mail' && (cid = this.get_single_uid())) {
+	  var url = (this.env.mailbox == this.env.drafts_mailbox) ? '_draft_uid=' : '_uid=';
+          this.goto_url('compose', url+cid+'&_mbox='+urlencode(this.env.mailbox), true);
+	}
         break;
 
       case 'save-identity':
@@ -1393,12 +1397,12 @@
     if (this.env.mailbox == this.env.drafts_mailbox)
       {
       this.enable_command('reply', 'reply-all', 'forward', false);
-      this.enable_command('show', 'print', 'open', 'download', 'viewsource', selected);
+      this.enable_command('show', 'print', 'open', 'edit', 'download', 'viewsource', selected);
       this.enable_command('delete', 'moveto', 'mark', (list.selection.length > 0 ? true : false));
       }
     else
       {
-      this.enable_command('show', 'reply', 'reply-all', 'forward', 'print', 'open', 'download', 'viewsource', selected);
+      this.enable_command('show', 'reply', 'reply-all', 'forward', 'print', 'edit', 'open', 'download', 'viewsource', selected);
       this.enable_command('delete', 'moveto', 'mark', (list.selection.length > 0 ? true : false));
       }
 
@@ -1803,7 +1807,7 @@
       this.show_contentframe(false);
 
     // Hide message command buttons until a message is selected
-    this.enable_command('reply', 'reply-all', 'forward', 'delete', 'mark', 'print', 'open', 'viewsource', 'download', false);
+    this.enable_command('reply', 'reply-all', 'forward', 'delete', 'mark', 'print', 'open', 'edit', 'viewsource', 'download', false);
 
     this._with_selected_messages('moveto', lock, add_url);
     };
@@ -3940,7 +3944,7 @@
       case 'moveto':
         if (this.env.action == 'show') {
 	  // re-enable commands on move/delete error
-	  this.enable_command('reply', 'reply-all', 'forward', 'delete', 'mark', 'print', 'open', 'viewsource', 'download', true);
+	  this.enable_command('reply', 'reply-all', 'forward', 'delete', 'mark', 'print', 'open', 'edit', 'viewsource', 'download', true);
         } else if (this.message_list)
           this.message_list.init();
         break;
@@ -3953,7 +3957,7 @@
             this.show_contentframe(false);
           // disable commands useless when mailbox is empty
           this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 
-	    'mark', 'viewsource', 'open', 'download', 'print', 'load-attachment', 
+	    'mark', 'viewsource', 'open', 'edit', 'download', 'print', 'load-attachment', 
 	    'purge', 'expunge', 'select-all', 'select-none', 'sort', false);
         }
         break;
diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc
index 8d541da..b0637d3 100644
--- a/program/steps/mail/compose.inc
+++ b/program/steps/mail/compose.inc
@@ -23,6 +23,7 @@
 define('RCUBE_COMPOSE_REPLY', 0x0106);
 define('RCUBE_COMPOSE_FORWARD', 0x0107);
 define('RCUBE_COMPOSE_DRAFT', 0x0108);
+define('RCUBE_COMPOSE_EDIT', 0x0109);
 
 $MESSAGE_FORM = NULL;
 $MESSAGE = NULL;
@@ -74,6 +75,8 @@
   $compose_mode = RCUBE_COMPOSE_REPLY;
 else if ($msg_uid = $_SESSION['compose']['param']['_forward_uid'])
   $compose_mode = RCUBE_COMPOSE_FORWARD;
+else if ($msg_uid = $_SESSION['compose']['param']['_uid'])
+  $compose_mode = RCUBE_COMPOSE_EDIT;
 else if ($msg_uid = $_SESSION['compose']['param']['_draft_uid']) {
   $RCMAIL->imap->set_mailbox($CONFIG['drafts_mbox']);
   $compose_mode = RCUBE_COMPOSE_DRAFT;
@@ -168,7 +171,6 @@
     $fvalue = get_input_value($fname, RCUBE_INPUT_POST, TRUE);
   else if ($fname && !$fvalue && !empty($_SESSION['compose']['param'][$fname]))
     $fvalue = $_SESSION['compose']['param'][$fname];
-
   else if ($header && $compose_mode == RCUBE_COMPOSE_REPLY)
   {
     // get recipent address(es) out of the message headers
@@ -208,7 +210,7 @@
       }
     }
   }
-  else if ($header && $compose_mode == RCUBE_COMPOSE_DRAFT)
+  else if ($header && in_array($compose_mode, array(RCUBE_COMPOSE_DRAFT, RCUBE_COMPOSE_EDIT)))
   {
     // get drafted headers
     if ($header=='to' && !empty($MESSAGE->headers->to))
@@ -385,7 +387,7 @@
     else if ($compose_mode == RCUBE_COMPOSE_FORWARD)
       $body = rcmail_create_forward_body($body, $isHtml);
     // load draft message body
-    else if ($compose_mode == RCUBE_COMPOSE_DRAFT)
+    else if ($compose_mode == RCUBE_COMPOSE_DRAFT || $compose_mode == RCUBE_COMPOSE_EDIT)
       $body = rcmail_create_draft_body($body, $isHtml);
   }
   else if (!empty($_SESSION['compose']['param']['_body']))
@@ -689,7 +691,7 @@
       $subject = 'Fwd: '.$MESSAGE->subject;
   }
   // creeate a draft-subject
-  else if ($compose_mode == RCUBE_COMPOSE_DRAFT) {
+  else if ($compose_mode == RCUBE_COMPOSE_DRAFT || $compose_mode == RCUBE_COMPOSE_EDIT) {
     $subject = $MESSAGE->subject;
   }
   else if (!empty($_SESSION['compose']['param']['_subject'])) {
@@ -828,8 +830,8 @@
   $checkbox = new html_checkbox($attrib);
 
   $out = $form_start ? "$form_start\n" : '';
-  $out .= $checkbox->show(
-    $compose_mode == RCUBE_COMPOSE_DRAFT && $MESSAGE->headers->mdn_to ? 1 : 0);
+  $out .= $checkbox->show(in_array($compose_mode, array(RCUBE_COMPOSE_DRAFT, RCUBE_COMPOSE_EDIT))
+	&& $MESSAGE->headers->mdn_to ? 1 : 0);
   $out .= $form_end ? "\n$form_end" : '';
 
   return $out;
diff --git a/skins/default/includes/messagemenu.html b/skins/default/includes/messagemenu.html
index 4112bfa..c5eadb6 100644
--- a/skins/default/includes/messagemenu.html
+++ b/skins/default/includes/messagemenu.html
@@ -2,6 +2,7 @@
   <ul class="toolbarmenu">
     <li><roundcube:button class="printlink" command="print" label="printmessage" classAct="printlink active" /></li>
     <li><roundcube:button class="downloadlink" command="download" label="emlsave" classAct="downloadlink active" /></li>
+    <li><roundcube:button class="editlink" command="edit" label="edit" classAct="editlink active" /></li>
     <li class="separator_below"><roundcube:button class="sourcelink" command="viewsource" label="viewsource" classAct="sourcelink active" /></li>
     <li><roundcube:button class="openlink" command="open" label="openinextwin" target="_blank" classAct="openlink active" /></li>
     <roundcube:container name="messagemenu" id="messagemenu" />
diff --git a/skins/default/mail.css b/skins/default/mail.css
index 6cadd2b..7b660d2 100644
--- a/skins/default/mail.css
+++ b/skins/default/mail.css
@@ -136,6 +136,7 @@
 #messagemenu li a
 {
   background: url('images/messageactions.png') no-repeat 1px 0;
+  background-position: 0px 20px;
 }
 
 #messagemenu li a.printlink

--
Gitblit v1.9.1