From 95c4c936bee17d6326310e3e34bb99d401db7dde Mon Sep 17 00:00:00 2001 From: "Michael J. Rubinsky" Date: Thu, 3 Jun 2010 12:50:45 -0400 Subject: [PATCH] Honor the truncation size from the client --- .../lib/Horde/ActiveSync/Driver/Base.php | 36 +++++++++++++++++++--- .../lib/Horde/ActiveSync/Driver/Horde.php | 18 ++++++++--- .../lib/Horde/ActiveSync/Message/Base.php | 20 ------------ 3 files changed, 44 insertions(+), 30 deletions(-) diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/Driver/Base.php b/framework/ActiveSync/lib/Horde/ActiveSync/Driver/Base.php index 46fff2887..cf685599b 100644 --- a/framework/ActiveSync/lib/Horde/ActiveSync/Driver/Base.php +++ b/framework/ActiveSync/lib/Horde/ActiveSync/Driver/Base.php @@ -235,11 +235,12 @@ abstract class Horde_ActiveSync_Driver_Base abstract public function statMessage($folderId, $id); /** + * Obtain an ActiveSync message from the backend. * - * @param $folderid - * @param $id - * @param $truncsize - * @param $mimesupport + * @param string $folderid The server's folder id this message is from + * @param string $id The server's message id + * @param integer $truncsize A TRUNCATION_* constant + * @param integer $mimesupport Mime support for this message * * @return Horde_ActiveSync_Message_Base The message data */ @@ -469,7 +470,7 @@ abstract class Horde_ActiveSync_Driver_Base * @param $flags * @return unknown_type */ - function setReadFlag($folderid, $id, $flags) + public function setReadFlag($folderid, $id, $flags) { return false; } @@ -600,4 +601,29 @@ abstract class Horde_ActiveSync_Driver_Base . ''; } + /** + * Truncate an UTF-8 encoded sting correctly + * + * If it's not possible to truncate properly, an empty string is returned + * + * @param string $string The string to truncate + * @param string $length The length of the returned string + * + * @return string The truncated string + */ + static public function truncate($string, $length) + { + if (strlen($string) <= $length) { + return $string; + } + while($length >= 0) { + if ((ord($string[$length]) < 0x80) || (ord($string[$length]) >= 0xC0)) { + return substr($string, 0, $length); + } + $length--; + } + + return ""; + } + } \ No newline at end of file diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/Driver/Horde.php b/framework/ActiveSync/lib/Horde/ActiveSync/Driver/Horde.php index 9f7cce04f..bdf8102fb 100644 --- a/framework/ActiveSync/lib/Horde/ActiveSync/Driver/Horde.php +++ b/framework/ActiveSync/lib/Horde/ActiveSync/Driver/Horde.php @@ -376,7 +376,7 @@ class Horde_ActiveSync_Driver_Horde extends Horde_ActiveSync_Driver_Base /** * Get a message from the backend * - * @see framework/ActiveSync/lib/Horde/ActiveSync/Driver/Horde_ActiveSync_Driver_Base#getMessage($folderid, $id, $truncsize, $mimesupport) + * @see framework/ActiveSync/lib/Horde/ActiveSync/Driver/Horde_ActiveSync_Driver_Base#getMessage */ public function getMessage($folderid, $id, $truncsize, $mimesupport = 0) { @@ -386,7 +386,7 @@ class Horde_ActiveSync_Driver_Horde extends Horde_ActiveSync_Driver_Base switch ($folderid) { case self::APPOINTMENTS_FOLDER: try { - return $this->_connector->calendar_export($id); + $message = $this->_connector->calendar_export($id); } catch (Horde_Exception $e) { $this->_logger->err($e->getMessage()); return false; @@ -395,17 +395,16 @@ class Horde_ActiveSync_Driver_Horde extends Horde_ActiveSync_Driver_Base case self::CONTACTS_FOLDER: try { - return $this->_connector->contacts_export($id); + $message = $this->_connector->contacts_export($id); } catch (Horde_Exception $e) { $this->_logger->err($e->getMessage()); return false; } - break; case self::TASKS_FOLDER: try { - return $this->_connector->tasks_export($id); + $message = $this->_connector->tasks_export($id); } catch (Horde_Exception $e) { $this->_logger->err($e->getMessage()); return false; @@ -414,6 +413,15 @@ class Horde_ActiveSync_Driver_Horde extends Horde_ActiveSync_Driver_Base default: return false; } + if (strlen($message->body) > $truncsize) { + $message->body = self::truncate($message->body, $truncsize); + $message->bodytruncated = 1; + } else { + // Be certain this is set. + $message->bodytruncated = 0; + } + + return $message; } /** diff --git a/framework/ActiveSync/lib/Horde/ActiveSync/Message/Base.php b/framework/ActiveSync/lib/Horde/ActiveSync/Message/Base.php index 10f4c5568..072d0dba3 100644 --- a/framework/ActiveSync/lib/Horde/ActiveSync/Message/Base.php +++ b/framework/ActiveSync/lib/Horde/ActiveSync/Message/Base.php @@ -285,26 +285,6 @@ class Horde_ActiveSync_Message_Base } /** - * Decodes a wbxml string into this object's properties. - * - * @param string $wbxml - */ - public function decode($wbxml) - { - throw new Horde_ActiveSync_Exception('Not implemented.'); - } - - /** - * Encodes this message object into a wbxml string. - * - * @return string wbxml string - */ - public function encode() - { - throw new Horde_ActiveSync_Exception('Not Implemented.'); - } - - /** * Encodes this object (and any sub-objects) as wbxml to the output stream. * Output is ordered according to $_mapping * -- 2.11.0