lib/kolab_sync_data_calendar.php lib/kolab_sync_data_contacts.php lib/kolab_sync_data_notes.php lib/kolab_sync_data.php lib/kolab_sync_data_tasks.php
Aleksander Machniak
machniak at kolabsys.com
Mon May 12 11:44:37 CEST 2014
lib/kolab_sync_data.php | 63 +++++++++++++++++++++++++++++++++++++--
lib/kolab_sync_data_calendar.php | 2 -
lib/kolab_sync_data_contacts.php | 2 -
lib/kolab_sync_data_notes.php | 9 ++++-
lib/kolab_sync_data_tasks.php | 2 -
5 files changed, 70 insertions(+), 8 deletions(-)
New commits:
commit f6985b56305a1ecb845ee758579fb8e2bb51f15f
Author: Aleksander Machniak <machniak at kolabsys.com>
Date: Mon May 12 11:44:16 2014 +0200
Support notes in HTML format
diff --git a/lib/kolab_sync_data.php b/lib/kolab_sync_data.php
index 8f0bfef..9c7a4a7 100644
--- a/lib/kolab_sync_data.php
+++ b/lib/kolab_sync_data.php
@@ -1146,7 +1146,7 @@ abstract class kolab_sync_data implements Syncroton_Data_IData
*
* @param mixed $body Body element
* @param int $type Result data type (to which the body will be converted, if specified).
- * One of Syncroton_Model_EmailBody constants.
+ * One or array of Syncroton_Model_EmailBody constants.
*
* @return string Body value
*/
@@ -1156,16 +1156,73 @@ abstract class kolab_sync_data implements Syncroton_Data_IData
$data = $body->data;
}
+ if (!$data || empty($type)) {
+ return;
+ }
+
+ $type = (array) $type;
+
// Convert to specified type
- if ($data && $type && $body->type != $type) {
+ if (!in_array($body->type, $type)) {
$converter = new kolab_sync_body_converter($data, $body->type);
- $data = $converter->convert($type);
+ $data = $converter->convert($type[0]);
}
return $data;
}
/**
+ * Converts text (plain or html) into ActiveSync Body element.
+ * Takes bodyPreferences into account and detects if the text is plain or html.
+ */
+ protected function body_from_kolab($body, $collection)
+ {
+ if (empty($body)) {
+ return;
+ }
+
+ $opts = $collection->options;
+ $prefs = $opts['bodyPreferences'];
+ $html_type = Syncroton_Command_Sync::BODY_TYPE_HTML;
+ $type = Syncroton_Command_Sync::BODY_TYPE_PLAIN_TEXT;
+ $params = array();
+
+ // HTML? check for opening and closing <html> or <body> tags
+ $is_html = preg_match('/<(html|body)(\s+[a-z]|>)/', $body, $m) && strpos($body, '</'.$m[1].'>') > 0;
+
+ // here we assume that all devices support plain text
+ if ($is_html) {
+ // device supports HTML...
+ if (!empty($prefs[$html_type])) {
+ $type = $html_type;
+ }
+ // ...else convert to plain text
+ else {
+ $txt = new rcube_html2text($body, false, true);
+ $body = $txt->get_text();
+ }
+ }
+
+ // strip out any non utf-8 characters
+ $body = rcube_charset::clean($body);
+ $real_length = $body_length = strlen($body);
+
+ // truncate the body if needed
+ if (($trucateAt = $prefs[$type]['truncationSize']) && $body_length > $truncateAt) {
+ $body = mb_strcut($body, 0, $truncateAt);
+ $body_length = strlen($body);
+
+ $params['truncated'] = 1;
+ $params['estimatedDataSize'] = $real_length;
+ }
+
+ $params['type'] = $type;
+
+ return $this->setBody($body, $params);
+ }
+
+
+ /**
* Converts PHP DateTime, date (YYYY-MM-DD) or unixtimestamp into PHP DateTime in UTC
*
* @param DateTime|int|string $date Unix timestamp, date (YYYY-MM-DD) or PHP DateTime object
diff --git a/lib/kolab_sync_data_calendar.php b/lib/kolab_sync_data_calendar.php
index 14b379a..a762356 100644
--- a/lib/kolab_sync_data_calendar.php
+++ b/lib/kolab_sync_data_calendar.php
@@ -242,7 +242,7 @@ class kolab_sync_data_calendar extends kolab_sync_data implements Syncroton_Data
break;
case 'description':
- $value = $this->setBody($value);
+ $value = $this->body_from_kolab($value, $collection);
break;
}
diff --git a/lib/kolab_sync_data_contacts.php b/lib/kolab_sync_data_contacts.php
index 02a77bc..97fefdf 100644
--- a/lib/kolab_sync_data_contacts.php
+++ b/lib/kolab_sync_data_contacts.php
@@ -156,7 +156,7 @@ class kolab_sync_data_contacts extends kolab_sync_data
break;
case 'notes':
- $value = $this->setBody($value);
+ $value = $this->body_from_kolab($value, $collection);
break;
}
diff --git a/lib/kolab_sync_data_notes.php b/lib/kolab_sync_data_notes.php
index 1bc151f..2e442be 100644
--- a/lib/kolab_sync_data_notes.php
+++ b/lib/kolab_sync_data_notes.php
@@ -95,7 +95,7 @@ class kolab_sync_data_notes extends kolab_sync_data
break;
case 'description':
- $value = $this->setBody($value);
+ $value = $this->body_from_kolab($value, $collection);
break;
}
@@ -132,7 +132,12 @@ class kolab_sync_data_notes extends kolab_sync_data
switch ($name) {
case 'description':
- $value = $this->getBody($value, Syncroton_Model_EmailBody::TYPE_PLAINTEXT);
+ $supported_body_types = array(
+ Syncroton_Model_EmailBody::TYPE_HTML,
+ Syncroton_Model_EmailBody::TYPE_PLAINTEXT,
+ );
+ $value = $this->getBody($value, $supported_body_types);
+
// If description isn't specified keep old description
if ($value === null) {
continue 2;
diff --git a/lib/kolab_sync_data_tasks.php b/lib/kolab_sync_data_tasks.php
index d43df66..e524c00 100644
--- a/lib/kolab_sync_data_tasks.php
+++ b/lib/kolab_sync_data_tasks.php
@@ -132,7 +132,7 @@ class kolab_sync_data_tasks extends kolab_sync_data
break;
case 'description':
- $value = $this->setBody($value);
+ $value = $this->body_from_kolab($value, $collection);
break;
case 'sensitivity':
More information about the commits
mailing list