diff options
Diffstat (limited to 'vendor/sabre/vobject/lib/Sabre/VObject/Property/Compound.php')
-rw-r--r-- | vendor/sabre/vobject/lib/Sabre/VObject/Property/Compound.php | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/vendor/sabre/vobject/lib/Sabre/VObject/Property/Compound.php b/vendor/sabre/vobject/lib/Sabre/VObject/Property/Compound.php new file mode 100644 index 000000000..26f090069 --- /dev/null +++ b/vendor/sabre/vobject/lib/Sabre/VObject/Property/Compound.php @@ -0,0 +1,125 @@ +<?php + +namespace Sabre\VObject\Property; + +use Sabre\VObject; + +/** + * Compound property. + * + * This class adds (de)serialization of compound properties to/from arrays. + * + * Currently the following properties from RFC 6350 are mapped to use this + * class: + * + * N: Section 6.2.2 + * ADR: Section 6.3.1 + * ORG: Section 6.6.4 + * CATEGORIES: Section 6.7.1 + * + * In order to use this correctly, you must call setParts and getParts to + * retrieve and modify dates respectively. + * + * @author Thomas Tanghus (http://tanghus.net/) + * @author Lars Kneschke + * @author Evert Pot (http://evertpot.com/) + * @copyright Copyright (C) 2007-2013 fruux GmbH (https://fruux.com/). + * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License + */ +class Compound extends VObject\Property { + + /** + * If property names are added to this map, they will be (de)serialised as arrays + * using the getParts() and setParts() methods. + * The keys are the property names, values are delimiter chars. + * + * @var array + */ + static public $delimiterMap = array( + 'N' => ';', + 'ADR' => ';', + 'ORG' => ';', + 'CATEGORIES' => ',', + ); + + /** + * The currently used delimiter. + * + * @var string + */ + protected $delimiter = null; + + /** + * Get a compound value as an array. + * + * @param $name string + * @return array + */ + public function getParts() { + + if (is_null($this->value)) { + return array(); + } + + $delimiter = $this->getDelimiter(); + + // split by any $delimiter which is NOT prefixed by a slash. + // Note that this is not a a perfect solution. If a value is prefixed + // by two slashes, it should actually be split anyway. + // + // Hopefully we can fix this better in a future version, where we can + // break compatibility a bit. + $compoundValues = preg_split("/(?<!\\\)$delimiter/", $this->value); + + // remove slashes from any semicolon and comma left escaped in the single values + $compoundValues = array_map( + function($val) { + return strtr($val, array('\,' => ',', '\;' => ';')); + }, $compoundValues); + + return $compoundValues; + + } + + /** + * Returns the delimiter for this property. + * + * @return string + */ + public function getDelimiter() { + + if (!$this->delimiter) { + if (isset(self::$delimiterMap[$this->name])) { + $this->delimiter = self::$delimiterMap[$this->name]; + } else { + // To be a bit future proof, we are going to default the + // delimiter to ; + $this->delimiter = ';'; + } + } + return $this->delimiter; + + } + + /** + * Set a compound value as an array. + * + * + * @param $name string + * @return array + */ + public function setParts(array $values) { + + // add slashes to all semicolons and commas in the single values + $values = array_map( + function($val) { + return strtr($val, array(',' => '\,', ';' => '\;')); + }, $values); + + $this->setValue( + implode($this->getDelimiter(), $values) + ); + + } + +} |