From: Michael J. Rubinsky Date: Thu, 3 Jun 2010 16:50:45 +0000 (-0400) Subject: Honor the truncation size from the client X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=95c4c936bee17d6326310e3e34bb99d401db7dde;p=horde.git Honor the truncation size from the client --- 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 *