Mercurial > hg > rc1
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 3:f6fe4b6ae66a | 4:888e774ee983 |
|---|---|
| 1 <?php | |
| 2 | |
| 3 namespace Sabre\VObject\Property; | |
| 4 | |
| 5 use Sabre\VObject; | |
| 6 | |
| 7 /** | |
| 8 * Compound property. | |
| 9 * | |
| 10 * This class adds (de)serialization of compound properties to/from arrays. | |
| 11 * | |
| 12 * Currently the following properties from RFC 6350 are mapped to use this | |
| 13 * class: | |
| 14 * | |
| 15 * N: Section 6.2.2 | |
| 16 * ADR: Section 6.3.1 | |
| 17 * ORG: Section 6.6.4 | |
| 18 * CATEGORIES: Section 6.7.1 | |
| 19 * | |
| 20 * In order to use this correctly, you must call setParts and getParts to | |
| 21 * retrieve and modify dates respectively. | |
| 22 * | |
| 23 * @author Thomas Tanghus (http://tanghus.net/) | |
| 24 * @author Lars Kneschke | |
| 25 * @author Evert Pot (http://evertpot.com/) | |
| 26 * @copyright Copyright (C) 2007-2013 fruux GmbH (https://fruux.com/). | |
| 27 * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License | |
| 28 */ | |
| 29 class Compound extends VObject\Property { | |
| 30 | |
| 31 /** | |
| 32 * If property names are added to this map, they will be (de)serialised as arrays | |
| 33 * using the getParts() and setParts() methods. | |
| 34 * The keys are the property names, values are delimiter chars. | |
| 35 * | |
| 36 * @var array | |
| 37 */ | |
| 38 static public $delimiterMap = array( | |
| 39 'N' => ';', | |
| 40 'ADR' => ';', | |
| 41 'ORG' => ';', | |
| 42 'CATEGORIES' => ',', | |
| 43 ); | |
| 44 | |
| 45 /** | |
| 46 * The currently used delimiter. | |
| 47 * | |
| 48 * @var string | |
| 49 */ | |
| 50 protected $delimiter = null; | |
| 51 | |
| 52 /** | |
| 53 * Get a compound value as an array. | |
| 54 * | |
| 55 * @param $name string | |
| 56 * @return array | |
| 57 */ | |
| 58 public function getParts() { | |
| 59 | |
| 60 if (is_null($this->value)) { | |
| 61 return array(); | |
| 62 } | |
| 63 | |
| 64 $delimiter = $this->getDelimiter(); | |
| 65 | |
| 66 // split by any $delimiter which is NOT prefixed by a slash. | |
| 67 // Note that this is not a a perfect solution. If a value is prefixed | |
| 68 // by two slashes, it should actually be split anyway. | |
| 69 // | |
| 70 // Hopefully we can fix this better in a future version, where we can | |
| 71 // break compatibility a bit. | |
| 72 $compoundValues = preg_split("/(?<!\\\)$delimiter/", $this->value); | |
| 73 | |
| 74 // remove slashes from any semicolon and comma left escaped in the single values | |
| 75 $compoundValues = array_map( | |
| 76 function($val) { | |
| 77 return strtr($val, array('\,' => ',', '\;' => ';')); | |
| 78 }, $compoundValues); | |
| 79 | |
| 80 return $compoundValues; | |
| 81 | |
| 82 } | |
| 83 | |
| 84 /** | |
| 85 * Returns the delimiter for this property. | |
| 86 * | |
| 87 * @return string | |
| 88 */ | |
| 89 public function getDelimiter() { | |
| 90 | |
| 91 if (!$this->delimiter) { | |
| 92 if (isset(self::$delimiterMap[$this->name])) { | |
| 93 $this->delimiter = self::$delimiterMap[$this->name]; | |
| 94 } else { | |
| 95 // To be a bit future proof, we are going to default the | |
| 96 // delimiter to ; | |
| 97 $this->delimiter = ';'; | |
| 98 } | |
| 99 } | |
| 100 return $this->delimiter; | |
| 101 | |
| 102 } | |
| 103 | |
| 104 /** | |
| 105 * Set a compound value as an array. | |
| 106 * | |
| 107 * | |
| 108 * @param $name string | |
| 109 * @return array | |
| 110 */ | |
| 111 public function setParts(array $values) { | |
| 112 | |
| 113 // add slashes to all semicolons and commas in the single values | |
| 114 $values = array_map( | |
| 115 function($val) { | |
| 116 return strtr($val, array(',' => '\,', ';' => '\;')); | |
| 117 }, $values); | |
| 118 | |
| 119 $this->setValue( | |
| 120 implode($this->getDelimiter(), $values) | |
| 121 ); | |
| 122 | |
| 123 } | |
| 124 | |
| 125 } |
