aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2013-05-15 14:34:16 -0700
committerThomas Müller <thomas.mueller@tmit.eu>2013-05-15 14:34:16 -0700
commitdfddaf8fbf5ff515f26ff462c7ba6166b3d0ed18 (patch)
tree5f3d3421062914c4856d75e706f7c356be55af99
parent4b3c58c2ca0daa21ce68b2d045c50abc35f60e23 (diff)
parent990980392c754edac0b4f8325458f1055c7ba0d8 (diff)
downloadnextcloud-server-dfddaf8fbf5ff515f26ff462c7ba6166b3d0ed18.tar.gz
nextcloud-server-dfddaf8fbf5ff515f26ff462c7ba6166b3d0ed18.zip
Merge pull request #3374 from owncloud/vobject_compound_property
Add Compound property to avoid double escaping values.
-rwxr-xr-xautotest.sh7
-rw-r--r--lib/vobject/compoundproperty.php70
-rw-r--r--tests/lib/vobject.php19
3 files changed, 95 insertions, 1 deletions
diff --git a/autotest.sh b/autotest.sh
index fdf6d2fe098..267815e96d8 100755
--- a/autotest.sh
+++ b/autotest.sh
@@ -90,7 +90,12 @@ function execute_tests {
rm -rf coverage-html-$1
mkdir coverage-html-$1
php -f enable_all.php
- phpunit --configuration phpunit-autotest.xml --log-junit autotest-results-$1.xml --coverage-clover autotest-clover-$1.xml --coverage-html coverage-html-$1
+ if [ "$1" == "pgsql" ] ; then
+ # no coverage with pg - causes segfault on ci.tmit.eu - reason unknown
+ phpunit --configuration phpunit-autotest.xml --log-junit autotest-results-$1.xml
+ else
+ phpunit --configuration phpunit-autotest.xml --log-junit autotest-results-$1.xml --coverage-clover autotest-clover-$1.xml --coverage-html coverage-html-$1
+ fi
}
#
diff --git a/lib/vobject/compoundproperty.php b/lib/vobject/compoundproperty.php
new file mode 100644
index 00000000000..d702ab802e0
--- /dev/null
+++ b/lib/vobject/compoundproperty.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * ownCloud - VObject Compound Property
+ *
+ * @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() to not
+ * double escape commas and semi-colons in compound properties.
+*/
+class CompoundProperty extends \Sabre\VObject\Property\Compound {
+
+ /**
+ * 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',
+ );
+ $str.=':' . str_replace($src, $out, $this->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
index 1103a4b3297..f28d22a1fcd 100644
--- a/tests/lib/vobject.php
+++ b/tests/lib/vobject.php
@@ -10,10 +10,29 @@ class Test_VObject extends PHPUnit_Framework_TestCase {
public function setUp() {
Sabre\VObject\Property::$classMap['SUMMARY'] = 'OC\VObject\StringProperty';
+ Sabre\VObject\Property::$classMap['ORG'] = 'OC\VObject\CompoundProperty';
}
function testStringProperty() {
$property = Sabre\VObject\Property::create('SUMMARY', 'Escape;this,please');
$this->assertEquals("SUMMARY:Escape\;this\,please\r\n", $property->serialize());
}
+
+ function testCompoundProperty() {
+
+ $arr = array(
+ 'ABC, Inc.',
+ 'North American Division',
+ 'Marketing;Sales',
+ );
+
+ $property = Sabre\VObject\Property::create('ORG');
+ $property->setParts($arr);
+
+ $this->assertEquals('ABC\, Inc.;North American Division;Marketing\;Sales', $property->value);
+ $this->assertEquals('ORG:ABC\, Inc.;North American Division;Marketing\;Sales' . "\r\n", $property->serialize());
+ $this->assertEquals(3, count($property->getParts()));
+ $parts = $property->getParts();
+ $this->assertEquals('Marketing;Sales', $parts[2]);
+ }
} \ No newline at end of file