diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2013-04-08 14:23:38 -0700 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2013-04-08 14:23:38 -0700 |
commit | 89818e279b5643152482141ae610cfc87c624f38 (patch) | |
tree | 901166b28957a769cef4e183e018e9740e79f57a | |
parent | ccde0212b193a71a258f244424fa2293f08831fb (diff) | |
parent | a783bdaec14a24f5b785c2f98214df02f8dd74f7 (diff) | |
download | nextcloud-server-89818e279b5643152482141ae610cfc87c624f38.tar.gz nextcloud-server-89818e279b5643152482141ae610cfc87c624f38.zip |
Merge pull request #2785 from owncloud/vobject_stringproperty
Add OC\VObject\StringProperty. Partial fix for owncloud/apps#762
-rw-r--r-- | lib/vobject/stringproperty.php | 80 | ||||
-rw-r--r-- | tests/lib/vobject.php | 19 |
2 files changed, 99 insertions, 0 deletions
diff --git a/lib/vobject/stringproperty.php b/lib/vobject/stringproperty.php new file mode 100644 index 00000000000..b98a8f26c2b --- /dev/null +++ b/lib/vobject/stringproperty.php @@ -0,0 +1,80 @@ +<?php +/** + * ownCloud - VObject String Property + * + * This class adds escaping of simple string properties. + * + * @author Thomas Tanghus + * @author Evert Pot (http://www.rooftopsolutions.nl/) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + * + */ + +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 diff --git a/tests/lib/vobject.php b/tests/lib/vobject.php new file mode 100644 index 00000000000..1103a4b3297 --- /dev/null +++ b/tests/lib/vobject.php @@ -0,0 +1,19 @@ +<?php +/** + * Copyright (c) 2013 Thomas Tanghus (thomas@tanghus.net) + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +class Test_VObject extends PHPUnit_Framework_TestCase { + + public function setUp() { + Sabre\VObject\Property::$classMap['SUMMARY'] = 'OC\VObject\StringProperty'; + } + + function testStringProperty() { + $property = Sabre\VObject\Property::create('SUMMARY', 'Escape;this,please'); + $this->assertEquals("SUMMARY:Escape\;this\,please\r\n", $property->serialize()); + } +}
\ No newline at end of file |