From 7ac533dedea5bae31baa2eb6450cc0eb8c1b0090 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Thu, 11 Oct 2012 04:17:12 -0400
Subject: [PATCH] Add flags and date arguments to kolab_storage::save_message()

---
 program/include/rcube_imap.php    |   47 +++++++++++++++++++++++++++++++++++++----------
 program/include/rcube_storage.php |    4 +++-
 program/steps/mail/sendmail.inc   |    3 ++-
 3 files changed, 42 insertions(+), 12 deletions(-)

diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index 8a1c65b..1e6cf36 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -2219,10 +2219,12 @@
      * @param string  $message The message source string or filename
      * @param string  $headers Headers string if $message contains only the body
      * @param boolean $is_file True if $message is a filename
+     * @param array   $flags   Message flags
+     * @param mixed   $date    Message internal date
      *
      * @return int|bool Appended message UID or True on success, False on error
      */
-    public function save_message($folder, &$message, $headers='', $is_file=false)
+    public function save_message($folder, &$message, $headers='', $is_file=false, $flags = array(), $date = null)
     {
         if (!strlen($folder)) {
             $folder = $this->folder;
@@ -2232,16 +2234,18 @@
             return false;
         }
 
-        $flags = array('SEEN');
-
         // make sure folder exists
-        if ($this->folder_exists($folder)) {
-            if ($is_file) {
-                $saved = $this->conn->appendFromFile($folder, $message, $headers, $flags);
-            }
-            else {
-                $saved = $this->conn->append($folder, $message, $flags);
-            }
+        if (!$this->folder_exists($folder)) {
+            return false;
+        }
+
+        $date = $this->date_format($date);
+
+        if ($is_file) {
+            $saved = $this->conn->appendFromFile($folder, $message, $headers, $flags, $date);
+        }
+        else {
+            $saved = $this->conn->append($folder, $message, $flags, $date);
         }
 
         if ($saved) {
@@ -3984,6 +3988,29 @@
 
 
     /**
+     * Converts date string/object into IMAP date/time format
+     */
+    protected function date_format($date)
+    {
+        if (empty($date)) {
+            return null;
+        }
+
+        if (!is_object($date) || !is_a($date, 'DateTime')) {
+            try {
+                $timestamp = rcube_utils::strtotime($date);
+                $date      = new DateTime("@".$timestamp);
+            }
+            catch (Exception $e) {
+                return null;
+            }
+        }
+
+        return $date->format('d-M-Y H:i:s O');
+    }
+
+
+    /**
      * This is our own debug handler for the IMAP connection
      * @access public
      */
diff --git a/program/include/rcube_storage.php b/program/include/rcube_storage.php
index f83e240..933ebcc 100644
--- a/program/include/rcube_storage.php
+++ b/program/include/rcube_storage.php
@@ -545,10 +545,12 @@
      * @param string  $message The message source string or filename
      * @param string  $headers Headers string if $message contains only the body
      * @param boolean $is_file True if $message is a filename
+     * @param array   $flags   Message flags
+     * @param mixed   $date    Message internal date
      *
      * @return int|bool Appended message UID or True on success, False on error
      */
-    abstract function save_message($folder, &$message, $headers = '', $is_file = false);
+    abstract function save_message($folder, &$message, $headers = '', $is_file = false, $flags = array(), $date = null);
 
 
     /**
diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc
index 5c2c6de..ee6a3d3 100644
--- a/program/steps/mail/sendmail.inc
+++ b/program/steps/mail/sendmail.inc
@@ -739,7 +739,8 @@
             'message' => "Could not create message: ".$msg->getMessage()),
             TRUE, FALSE);
     else {
-      $saved = $RCMAIL->storage->save_message($store_target, $msg, $headers, $mailbody_file ? true : false);
+      $saved = $RCMAIL->storage->save_message($store_target, $msg, $headers,
+        $mailbody_file ? true : false, array('SEEN'));
     }
 
     if ($mailbody_file) {

--
Gitblit v1.9.1