summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2013-04-08 14:23:38 -0700
committerThomas Müller <thomas.mueller@tmit.eu>2013-04-08 14:23:38 -0700
commit89818e279b5643152482141ae610cfc87c624f38 (patch)
tree901166b28957a769cef4e183e018e9740e79f57a
parentccde0212b193a71a258f244424fa2293f08831fb (diff)
parenta783bdaec14a24f5b785c2f98214df02f8dd74f7 (diff)
downloadnextcloud-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.php80
-rw-r--r--tests/lib/vobject.php19
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