From ae9548bc6e70a2ec4f1b2d1f6fcbb160e5ba666a Mon Sep 17 00:00:00 2001 From: Thomas Tanghus Date: Mon, 8 Apr 2013 14:57:43 +0200 Subject: [PATCH] Add OC\VObject\StringProperty. Partial fix for owncloud/apps#762 --- lib/vobject/stringproperty.php | 80 ++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 lib/vobject/stringproperty.php diff --git a/lib/vobject/stringproperty.php b/lib/vobject/stringproperty.php new file mode 100644 index 0000000000..b98a8f26c2 --- /dev/null +++ b/lib/vobject/stringproperty.php @@ -0,0 +1,80 @@ +. + * + */ + +namespace OC\VObject; + +/** + * This class overrides \Sabre\VObject\Property::serialize() properly + * escape commas and semi-colons in string properties. +*/ +class StringProperty extends \Sabre\VObject\Property { + + /** + * Turns the object back into a serialized blob. + * + * @return string + */ + public function serialize() { + + $str = $this->name; + if ($this->group) { + $str = $this->group . '.' . $this->name; + } + + foreach($this->parameters as $param) { + $str.=';' . $param->serialize(); + } + + $src = array( + '\\', + "\n", + ';', + ',', + ); + $out = array( + '\\\\', + '\n', + '\;', + '\,', + ); + $value = strtr($this->value, array('\,' => ',', '\;' => ';', '\\\\' => '\\')); + $str.=':' . str_replace($src, $out, $value); + + $out = ''; + while(strlen($str) > 0) { + if (strlen($str) > 75) { + $out .= mb_strcut($str, 0, 75, 'utf-8') . "\r\n"; + $str = ' ' . mb_strcut($str, 75, strlen($str), 'utf-8'); + } else { + $out .= $str . "\r\n"; + $str = ''; + break; + } + } + + return $out; + + } + +} \ No newline at end of file