Mercurial > hg > rc1
view plugins/libcalendaring/lib/Sabre/VObject/Property/Compound.php @ 4:888e774ee983
libcalendar plugin as distributed
author | Charlie Root |
---|---|
date | Sat, 13 Jan 2018 08:57:56 -0500 |
parents | |
children |
line wrap: on
line source
<?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) ); } }