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