]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add OC\VObject\StringProperty. Partial fix for owncloud/apps#762
authorThomas Tanghus <thomas@tanghus.net>
Mon, 8 Apr 2013 12:57:43 +0000 (14:57 +0200)
committerThomas Tanghus <thomas@tanghus.net>
Thu, 16 May 2013 14:58:28 +0000 (16:58 +0200)
lib/vobject/stringproperty.php [new file with mode: 0644]

diff --git a/lib/vobject/stringproperty.php b/lib/vobject/stringproperty.php
new file mode 100644 (file)
index 0000000..b98a8f2
--- /dev/null
@@ -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