plugins/libkolab

Aleksander Machniak machniak at kolabsys.com
Wed Jan 16 09:29:02 CET 2013


 plugins/libkolab/lib/kolab_format.php                  |    4 +-
 plugins/libkolab/lib/kolab_format_configuration.php    |    4 +-
 plugins/libkolab/lib/kolab_format_contact.php          |    6 ++-
 plugins/libkolab/lib/kolab_format_distributionlist.php |    4 +-
 plugins/libkolab/lib/kolab_format_event.php            |   19 ++++++++--
 plugins/libkolab/lib/kolab_format_file.php             |   32 ++++++++++-------
 plugins/libkolab/lib/kolab_format_journal.php          |    5 +-
 plugins/libkolab/lib/kolab_format_note.php             |    5 +-
 plugins/libkolab/lib/kolab_format_task.php             |    4 +-
 plugins/libkolab/lib/kolab_format_xcal.php             |    4 +-
 plugins/libkolab/lib/kolab_storage_folder.php          |   11 ++---
 11 files changed, 66 insertions(+), 32 deletions(-)

New commits:
commit ddeb606dafc9e53063e5c4534070015389a35440
Author: Aleksander Machniak <machniak at kolabsys.com>
Date:   Wed Jan 16 09:27:34 2013 +0100

    Fix File support. Fix handling of non-inline attachments of event and file objects.

diff --git a/plugins/libkolab/lib/kolab_format.php b/plugins/libkolab/lib/kolab_format.php
index c3c1b12..d884207 100644
--- a/plugins/libkolab/lib/kolab_format.php
+++ b/plugins/libkolab/lib/kolab_format.php
@@ -386,9 +386,11 @@ abstract class kolab_format
     /**
      * Convert the Kolab object into a hash array data structure
      *
+     * @param array Additional data for merge
+     *
      * @return array  Kolab object data as hash array
      */
-    abstract public function to_array();
+    abstract public function to_array($data = array());
 
     /**
      * Callback for kolab_storage_cache to get object specific tags to cache
diff --git a/plugins/libkolab/lib/kolab_format_configuration.php b/plugins/libkolab/lib/kolab_format_configuration.php
index 0edc6a2..5e64e30 100644
--- a/plugins/libkolab/lib/kolab_format_configuration.php
+++ b/plugins/libkolab/lib/kolab_format_configuration.php
@@ -88,9 +88,11 @@ class kolab_format_configuration extends kolab_format
     /**
      * Convert the Configuration object into a hash array data structure
      *
+     * @param array Additional data for merge
+     *
      * @return array  Config object data as hash array
      */
-    public function to_array()
+    public function to_array($data = array())
     {
         // return cached result
         if (!empty($this->data))
diff --git a/plugins/libkolab/lib/kolab_format_contact.php b/plugins/libkolab/lib/kolab_format_contact.php
index 39e579c..7994b97 100644
--- a/plugins/libkolab/lib/kolab_format_contact.php
+++ b/plugins/libkolab/lib/kolab_format_contact.php
@@ -266,9 +266,11 @@ class kolab_format_contact extends kolab_format
     /**
      * Convert the Contact object into a hash array data structure
      *
+     * @param array Additional data for merge
+     *
      * @return array  Contact data as hash array
      */
-    public function to_array()
+    public function to_array($data = array())
     {
         // return cached result
         if (!empty($this->data))
@@ -341,7 +343,7 @@ class kolab_format_contact extends kolab_format
         if ($this->obj->photoMimetype())
             $object['photo'] = $this->obj->photo();
         else if ($this->xmlobject && ($photo_name = $this->xmlobject->pictureAttachmentName()))
-        	$object['photo'] = $photo_name;
+            $object['photo'] = $photo_name;
 
         // relateds -> spouse, children
         $this->read_relateds($this->obj->relateds(), $object);
diff --git a/plugins/libkolab/lib/kolab_format_distributionlist.php b/plugins/libkolab/lib/kolab_format_distributionlist.php
index 5622fc5..f91f697 100644
--- a/plugins/libkolab/lib/kolab_format_distributionlist.php
+++ b/plugins/libkolab/lib/kolab_format_distributionlist.php
@@ -83,9 +83,11 @@ class kolab_format_distributionlist extends kolab_format
     /**
      * Convert the Distlist object into a hash array data structure
      *
+     * @param array Additional data for merge
+     *
      * @return array  Distribution list data as hash array
      */
-    public function to_array()
+    public function to_array($data = array())
     {
         // return cached result
         if (!empty($this->data))
diff --git a/plugins/libkolab/lib/kolab_format_event.php b/plugins/libkolab/lib/kolab_format_event.php
index 4ef6735..d750f8e 100644
--- a/plugins/libkolab/lib/kolab_format_event.php
+++ b/plugins/libkolab/lib/kolab_format_event.php
@@ -106,9 +106,11 @@ class kolab_format_event extends kolab_format_xcal
     /**
      * Convert the Event object into a hash array data structure
      *
+     * @param array Additional data for merge
+     *
      * @return array  Event data as hash array
      */
-    public function to_array()
+    public function to_array($data = array())
     {
         // return cached result
         if (!empty($this->data))
@@ -158,8 +160,19 @@ class kolab_format_event extends kolab_format_xcal
             }
         }
 
-        $this->data = $object;
-        return $this->data;
+        // merge with additional data, e.g. attachments from the message
+        if ($data) {
+            foreach ($data as $idx => $value) {
+                if (is_array($value)) {
+                    $object[$idx] = array_merge((array)$object[$idx], $value);
+                }
+                else {
+                    $object[$idx] = $value;
+                }
+            }
+        }
+
+        return $this->data = $object;
     }
 
     /**
diff --git a/plugins/libkolab/lib/kolab_format_file.php b/plugins/libkolab/lib/kolab_format_file.php
index b3ab158..22d1e7c 100644
--- a/plugins/libkolab/lib/kolab_format_file.php
+++ b/plugins/libkolab/lib/kolab_format_file.php
@@ -27,6 +27,7 @@ class kolab_format_file extends kolab_format
 {
     public $CTYPE = 'application/x-vnd.kolab.file';
 
+    protected $objclass = 'File';
     protected $read_func = 'kolabformat::readKolabFile';
     protected $write_func = 'kolabformat::writeKolabFile';
 
@@ -36,12 +37,6 @@ class kolab_format_file extends kolab_format
         'confidential' => kolabformat::ClassConfidential,
     );
 
-    function __construct($xmldata = null)
-    {
-        $this->obj = new File;
-        $this->xmldata = $xmldata;
-    }
-
     /**
      * Set properties to the kolabformat object
      *
@@ -101,9 +96,11 @@ class kolab_format_file extends kolab_format
     /**
      * Convert the Configuration object into a hash array data structure
      *
+     * @param array Additional data for merge
+     *
      * @return array  Config object data as hash array
      */
-    public function to_array()
+    public function to_array($data = array())
     {
         // return cached result
         if (!empty($this->data))
@@ -123,12 +120,19 @@ class kolab_format_file extends kolab_format
             'notes'       => $this->obj->note(),
         );
 
-        // attachments are mime message parts handled by kolab_storage_folder
-        // @TODO: handle inline attachments
-
-        $this->data = $object;
+        // merge with additional data, e.g. attachments from the message
+        if ($data) {
+            foreach ($data as $idx => $value) {
+                if (is_array($value)) {
+                    $object[$idx] = array_merge((array)$object[$idx], $value);
+                }
+                else {
+                    $object[$idx] = $value;
+                }
+            }
+        }
 
-        return $this->data;
+        return $this->data = $object;
     }
 
     /**
@@ -155,6 +159,10 @@ class kolab_format_file extends kolab_format
     public function get_words()
     {
         // Store filename in 'words' for fast access to file by name
+        if (empty($this->data['_attachments'])) {
+            return array();
+        }
+
         $attachment = array_shift($this->data['_attachments']);
         return array($attachment['name']);
     }
diff --git a/plugins/libkolab/lib/kolab_format_journal.php b/plugins/libkolab/lib/kolab_format_journal.php
index daab1ac..01cdc3d 100644
--- a/plugins/libkolab/lib/kolab_format_journal.php
+++ b/plugins/libkolab/lib/kolab_format_journal.php
@@ -66,9 +66,11 @@ class kolab_format_journal extends kolab_format
     /**
      * Convert the Configuration object into a hash array data structure
      *
+     * @param array Additional data for merge
+     *
      * @return array  Config object data as hash array
      */
-    public function to_array()
+    public function to_array($data = array())
     {
         // return cached result
         if (!empty($this->data))
@@ -83,7 +85,6 @@ class kolab_format_journal extends kolab_format
             'changed' => self::php_datetime($this->obj->lastModified()),
         );
 
-
         // TODO: read object properties
 
         $this->data = $object;
diff --git a/plugins/libkolab/lib/kolab_format_note.php b/plugins/libkolab/lib/kolab_format_note.php
index 5af9343..5a9c0bc 100644
--- a/plugins/libkolab/lib/kolab_format_note.php
+++ b/plugins/libkolab/lib/kolab_format_note.php
@@ -66,9 +66,11 @@ class kolab_format_note extends kolab_format
     /**
      * Convert the Configuration object into a hash array data structure
      *
+     * @param array Additional data for merge
+     *
      * @return array  Config object data as hash array
      */
-    public function to_array()
+    public function to_array($data = array())
     {
         // return cached result
         if (!empty($this->data))
@@ -83,7 +85,6 @@ class kolab_format_note extends kolab_format
             'changed'   => self::php_datetime($this->obj->lastModified()),
         );
 
-
         // TODO: read object properties
 
         $this->data = $object;
diff --git a/plugins/libkolab/lib/kolab_format_task.php b/plugins/libkolab/lib/kolab_format_task.php
index 77870c7..d66cafd 100644
--- a/plugins/libkolab/lib/kolab_format_task.php
+++ b/plugins/libkolab/lib/kolab_format_task.php
@@ -71,9 +71,11 @@ class kolab_format_task extends kolab_format_xcal
     /**
      * Convert the Configuration object into a hash array data structure
      *
+     * @param array Additional data for merge
+     *
      * @return array  Config object data as hash array
      */
-    public function to_array()
+    public function to_array($data = array())
     {
         // return cached result
         if (!empty($this->data))
diff --git a/plugins/libkolab/lib/kolab_format_xcal.php b/plugins/libkolab/lib/kolab_format_xcal.php
index 3e1a721..a6450af 100644
--- a/plugins/libkolab/lib/kolab_format_xcal.php
+++ b/plugins/libkolab/lib/kolab_format_xcal.php
@@ -88,9 +88,11 @@ abstract class kolab_format_xcal extends kolab_format
     /**
      * Convert common xcard properties into a hash array data structure
      *
+     * @param array Additional data for merge
+     *
      * @return array  Object data as hash array
      */
-    public function to_array()
+    public function to_array($data = array())
     {
         $status_map = array_flip($this->status_map);
         $sensitivity_map = array_flip($this->sensitivity_map);
diff --git a/plugins/libkolab/lib/kolab_storage_folder.php b/plugins/libkolab/lib/kolab_storage_folder.php
index 27517cf..a671faf 100644
--- a/plugins/libkolab/lib/kolab_storage_folder.php
+++ b/plugins/libkolab/lib/kolab_storage_folder.php
@@ -524,11 +524,10 @@ class kolab_storage_folder
         $format->load($xml);
 
         if ($format->is_valid()) {
-            $object = $format->to_array();
-            $object['_type'] = $object_type;
-            $object['_msguid'] = $msguid;
-            $object['_mailbox'] = $this->name;
-            $object['_attachments'] = array_merge((array)$object['_attachments'], $attachments);
+            $object = $format->to_array(array('_attachments' => $attachments));
+            $object['_type']      = $object_type;
+            $object['_msguid']    = $msguid;
+            $object['_mailbox']   = $this->name;
             $object['_formatobj'] = $format;
 
             return $object;
@@ -766,7 +765,7 @@ class kolab_storage_folder
         $object['uid'] = $format->uid;  // read UID from format
         $object['_formatobj'] = $format;
 
-        if (!$format->is_valid() || empty($object['uid'])) {
+        if (empty($xml) || !$format->is_valid() || empty($object['uid'])) {
             return false;
         }
 





More information about the commits mailing list