annotate vendor/sabre/vobject/lib/Component/VCard.php @ 7:430dbd5346f7

vendor sabre as distributed
author Charlie Root
date Sat, 13 Jan 2018 09:06:10 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
1 <?php
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
2
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
3 namespace Sabre\VObject\Component;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
4
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
5 use
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
6 Sabre\VObject;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
7
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
8 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
9 * The VCard component
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
10 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
11 * This component represents the BEGIN:VCARD and END:VCARD found in every
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
12 * vcard.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
13 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
14 * @copyright Copyright (C) 2011-2015 fruux GmbH (https://fruux.com/).
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
15 * @author Evert Pot (http://evertpot.com/)
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
16 * @license http://sabre.io/license/ Modified BSD License
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
17 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
18 class VCard extends VObject\Document {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
19
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
20 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
21 * The default name for this component.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
22 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
23 * This should be 'VCALENDAR' or 'VCARD'.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
24 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
25 * @var string
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
26 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
27 static $defaultName = 'VCARD';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
28
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
29 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
30 * Caching the version number
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
31 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
32 * @var int
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
33 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
34 private $version = null;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
35
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
36 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
37 * List of value-types, and which classes they map to.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
38 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
39 * @var array
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
40 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
41 static $valueMap = array(
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
42 'BINARY' => 'Sabre\\VObject\\Property\\Binary',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
43 'BOOLEAN' => 'Sabre\\VObject\\Property\\Boolean',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
44 'CONTENT-ID' => 'Sabre\\VObject\\Property\\FlatText', // vCard 2.1 only
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
45 'DATE' => 'Sabre\\VObject\\Property\\VCard\\Date',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
46 'DATE-TIME' => 'Sabre\\VObject\\Property\\VCard\\DateTime',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
47 'DATE-AND-OR-TIME' => 'Sabre\\VObject\\Property\\VCard\\DateAndOrTime', // vCard only
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
48 'FLOAT' => 'Sabre\\VObject\\Property\\Float',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
49 'INTEGER' => 'Sabre\\VObject\\Property\\Integer',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
50 'LANGUAGE-TAG' => 'Sabre\\VObject\\Property\\VCard\\LanguageTag',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
51 'TIMESTAMP' => 'Sabre\\VObject\\Property\\VCard\\TimeStamp',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
52 'TEXT' => 'Sabre\\VObject\\Property\\Text',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
53 'TIME' => 'Sabre\\VObject\\Property\\Time',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
54 'UNKNOWN' => 'Sabre\\VObject\\Property\\Unknown', // jCard / jCal-only.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
55 'URI' => 'Sabre\\VObject\\Property\\Uri',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
56 'URL' => 'Sabre\\VObject\\Property\\Uri', // vCard 2.1 only
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
57 'UTC-OFFSET' => 'Sabre\\VObject\\Property\\UtcOffset',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
58 );
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
59
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
60 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
61 * List of properties, and which classes they map to.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
62 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
63 * @var array
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
64 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
65 static $propertyMap = array(
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
66
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
67 // vCard 2.1 properties and up
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
68 'N' => 'Sabre\\VObject\\Property\\Text',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
69 'FN' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
70 'PHOTO' => 'Sabre\\VObject\\Property\\Binary', // Todo: we should add a class for Binary values.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
71 'BDAY' => 'Sabre\\VObject\\Property\\VCard\\DateAndOrTime',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
72 'ADR' => 'Sabre\\VObject\\Property\\Text',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
73 'LABEL' => 'Sabre\\VObject\\Property\\FlatText', // Removed in vCard 4.0
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
74 'TEL' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
75 'EMAIL' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
76 'MAILER' => 'Sabre\\VObject\\Property\\FlatText', // Removed in vCard 4.0
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
77 'GEO' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
78 'TITLE' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
79 'ROLE' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
80 'LOGO' => 'Sabre\\VObject\\Property\\Binary',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
81 // 'AGENT' => 'Sabre\\VObject\\Property\\', // Todo: is an embedded vCard. Probably rare, so
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
82 // not supported at the moment
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
83 'ORG' => 'Sabre\\VObject\\Property\\Text',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
84 'NOTE' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
85 'REV' => 'Sabre\\VObject\\Property\\VCard\\TimeStamp',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
86 'SOUND' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
87 'URL' => 'Sabre\\VObject\\Property\\Uri',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
88 'UID' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
89 'VERSION' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
90 'KEY' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
91 'TZ' => 'Sabre\\VObject\\Property\\Text',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
92
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
93 // vCard 3.0 properties
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
94 'CATEGORIES' => 'Sabre\\VObject\\Property\\Text',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
95 'SORT-STRING' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
96 'PRODID' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
97 'NICKNAME' => 'Sabre\\VObject\\Property\\Text',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
98 'CLASS' => 'Sabre\\VObject\\Property\\FlatText', // Removed in vCard 4.0
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
99
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
100 // rfc2739 properties
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
101 'FBURL' => 'Sabre\\VObject\\Property\\Uri',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
102 'CAPURI' => 'Sabre\\VObject\\Property\\Uri',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
103 'CALURI' => 'Sabre\\VObject\\Property\\Uri',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
104
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
105 // rfc4770 properties
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
106 'IMPP' => 'Sabre\\VObject\\Property\\Uri',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
107
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
108 // vCard 4.0 properties
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
109 'XML' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
110 'ANNIVERSARY' => 'Sabre\\VObject\\Property\\VCard\\DateAndOrTime',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
111 'CLIENTPIDMAP' => 'Sabre\\VObject\\Property\\Text',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
112 'LANG' => 'Sabre\\VObject\\Property\\VCard\\LanguageTag',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
113 'GENDER' => 'Sabre\\VObject\\Property\\Text',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
114 'KIND' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
115
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
116 // rfc6474 properties
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
117 'BIRTHPLACE' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
118 'DEATHPLACE' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
119 'DEATHDATE' => 'Sabre\\VObject\\Property\\VCard\\DateAndOrTime',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
120
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
121 // rfc6715 properties
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
122 'EXPERTISE' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
123 'HOBBY' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
124 'INTEREST' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
125 'ORG-DIRECTORY' => 'Sabre\\VObject\\Property\\FlatText',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
126
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
127 );
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
128
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
129 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
130 * Returns the current document type.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
131 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
132 * @return void
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
133 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
134 function getDocumentType() {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
135
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
136 if (!$this->version) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
137 $version = (string)$this->VERSION;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
138 switch($version) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
139 case '2.1' :
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
140 $this->version = self::VCARD21;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
141 break;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
142 case '3.0' :
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
143 $this->version = self::VCARD30;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
144 break;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
145 case '4.0' :
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
146 $this->version = self::VCARD40;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
147 break;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
148 default :
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
149 $this->version = self::UNKNOWN;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
150 break;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
151
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
152 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
153 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
154
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
155 return $this->version;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
156
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
157 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
158
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
159 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
160 * Converts the document to a different vcard version.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
161 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
162 * Use one of the VCARD constants for the target. This method will return
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
163 * a copy of the vcard in the new version.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
164 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
165 * At the moment the only supported conversion is from 3.0 to 4.0.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
166 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
167 * If input and output version are identical, a clone is returned.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
168 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
169 * @param int $target
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
170 * @return VCard
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
171 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
172 function convert($target) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
173
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
174 $converter = new VObject\VCardConverter();
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
175 return $converter->convert($this, $target);
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
176
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
177 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
178
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
179 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
180 * VCards with version 2.1, 3.0 and 4.0 are found.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
181 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
182 * If the VCARD doesn't know its version, 2.1 is assumed.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
183 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
184 const DEFAULT_VERSION = self::VCARD21;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
185
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
186 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
187 * Validates the node for correctness.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
188 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
189 * The following options are supported:
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
190 * Node::REPAIR - May attempt to automatically repair the problem.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
191 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
192 * This method returns an array with detected problems.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
193 * Every element has the following properties:
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
194 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
195 * * level - problem level.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
196 * * message - A human-readable string describing the issue.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
197 * * node - A reference to the problematic node.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
198 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
199 * The level means:
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
200 * 1 - The issue was repaired (only happens if REPAIR was turned on)
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
201 * 2 - An inconsequential issue
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
202 * 3 - A severe issue.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
203 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
204 * @param int $options
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
205 * @return array
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
206 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
207 function validate($options = 0) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
208
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
209 $warnings = array();
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
210
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
211 $versionMap = array(
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
212 self::VCARD21 => '2.1',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
213 self::VCARD30 => '3.0',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
214 self::VCARD40 => '4.0',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
215 );
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
216
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
217 $version = $this->select('VERSION');
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
218 if (count($version)===1) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
219 $version = (string)$this->VERSION;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
220 if ($version!=='2.1' && $version!=='3.0' && $version!=='4.0') {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
221 $warnings[] = array(
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
222 'level' => 3,
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
223 'message' => 'Only vcard version 4.0 (RFC6350), version 3.0 (RFC2426) or version 2.1 (icm-vcard-2.1) are supported.',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
224 'node' => $this,
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
225 );
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
226 if ($options & self::REPAIR) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
227 $this->VERSION = $versionMap[self::DEFAULT_VERSION];
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
228 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
229 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
230 if ($version === '2.1' && ($options & self::PROFILE_CARDDAV)) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
231 $warnings[] = array(
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
232 'level' => 3,
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
233 'message' => 'CardDAV servers are not allowed to accept vCard 2.1.',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
234 'node' => $this,
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
235 );
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
236 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
237
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
238 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
239 $uid = $this->select('UID');
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
240 if (count($uid) === 0) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
241 if ($options & self::PROFILE_CARDDAV) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
242 // Required for CardDAV
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
243 $warningLevel = 3;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
244 $message = 'vCards on CardDAV servers MUST have a UID property.';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
245 } else {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
246 // Not required for regular vcards
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
247 $warningLevel = 2;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
248 $message = 'Adding a UID to a vCard property is recommended.';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
249 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
250 if ($options & self::REPAIR) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
251 $this->UID = VObject\UUIDUtil::getUUID();
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
252 $warningLevel = 1;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
253 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
254 $warnings[] = array(
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
255 'level' => $warningLevel,
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
256 'message' => $message,
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
257 'node' => $this,
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
258 );
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
259 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
260
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
261 $fn = $this->select('FN');
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
262 if (count($fn)!==1) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
263
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
264 $repaired = false;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
265 if (($options & self::REPAIR) && count($fn) === 0) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
266 // We're going to try to see if we can use the contents of the
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
267 // N property.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
268 if (isset($this->N)) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
269 $value = explode(';', (string)$this->N);
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
270 if (isset($value[1]) && $value[1]) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
271 $this->FN = $value[1] . ' ' . $value[0];
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
272 } else {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
273 $this->FN = $value[0];
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
274 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
275 $repaired = true;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
276
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
277 // Otherwise, the ORG property may work
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
278 } elseif (isset($this->ORG)) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
279 $this->FN = (string)$this->ORG;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
280 $repaired = true;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
281 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
282
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
283 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
284 $warnings[] = array(
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
285 'level' => $repaired?1:3,
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
286 'message' => 'The FN property must appear in the VCARD component exactly 1 time',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
287 'node' => $this,
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
288 );
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
289 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
290
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
291 return array_merge(
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
292 parent::validate($options),
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
293 $warnings
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
294 );
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
295
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
296 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
297
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
298 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
299 * A simple list of validation rules.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
300 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
301 * This is simply a list of properties, and how many times they either
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
302 * must or must not appear.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
303 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
304 * Possible values per property:
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
305 * * 0 - Must not appear.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
306 * * 1 - Must appear exactly once.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
307 * * + - Must appear at least once.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
308 * * * - Can appear any number of times.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
309 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
310 * @var array
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
311 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
312 function getValidationRules() {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
313
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
314 return array(
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
315 'ADR' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
316 'ANNIVERSARY' => '?',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
317 'BDAY' => '?',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
318 'CALADRURI' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
319 'CALURI' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
320 'CATEGORIES' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
321 'CLIENTPIDMAP' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
322 'EMAIL' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
323 'FBURL' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
324 'IMPP' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
325 'GENDER' => '?',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
326 'GEO' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
327 'KEY' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
328 'KIND' => '?',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
329 'LANG' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
330 'LOGO' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
331 'MEMBER' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
332 'N' => '?',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
333 'NICKNAME' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
334 'NOTE' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
335 'ORG' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
336 'PHOTO' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
337 'PRODID' => '?',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
338 'RELATED' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
339 'REV' => '?',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
340 'ROLE' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
341 'SOUND' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
342 'SOURCE' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
343 'TEL' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
344 'TITLE' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
345 'TZ' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
346 'URL' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
347 'VERSION' => '1',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
348 'XML' => '*',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
349
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
350 // FN is commented out, because it's already handled by the
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
351 // validate function, which may also try to repair it.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
352 // 'FN' => '+',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
353
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
354 'UID' => '?',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
355 );
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
356
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
357 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
358
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
359 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
360 * Returns a preferred field.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
361 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
362 * VCards can indicate wether a field such as ADR, TEL or EMAIL is
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
363 * preferred by specifying TYPE=PREF (vcard 2.1, 3) or PREF=x (vcard 4, x
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
364 * being a number between 1 and 100).
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
365 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
366 * If neither of those parameters are specified, the first is returned, if
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
367 * a field with that name does not exist, null is returned.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
368 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
369 * @param string $fieldName
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
370 * @return VObject\Property|null
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
371 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
372 function preferred($propertyName) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
373
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
374 $preferred = null;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
375 $lastPref = 101;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
376 foreach($this->select($propertyName) as $field) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
377
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
378 $pref = 101;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
379 if (isset($field['TYPE']) && $field['TYPE']->has('PREF')) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
380 $pref = 1;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
381 } elseif (isset($field['PREF'])) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
382 $pref = $field['PREF']->getValue();
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
383 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
384
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
385 if ($pref < $lastPref || is_null($preferred)) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
386 $preferred = $field;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
387 $lastPref = $pref;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
388 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
389
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
390 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
391 return $preferred;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
392
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
393 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
394
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
395 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
396 * This method should return a list of default property values.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
397 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
398 * @return array
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
399 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
400 protected function getDefaults() {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
401
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
402 return array(
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
403 'VERSION' => '3.0',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
404 'PRODID' => '-//Sabre//Sabre VObject ' . VObject\Version::VERSION . '//EN',
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
405 );
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
406
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
407 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
408
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
409 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
410 * This method returns an array, with the representation as it should be
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
411 * encoded in json. This is used to create jCard or jCal documents.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
412 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
413 * @return array
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
414 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
415 function jsonSerialize() {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
416
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
417 // A vcard does not have sub-components, so we're overriding this
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
418 // method to remove that array element.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
419 $properties = array();
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
420
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
421 foreach($this->children as $child) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
422 $properties[] = $child->jsonSerialize();
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
423 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
424
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
425 return array(
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
426 strtolower($this->name),
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
427 $properties,
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
428 );
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
429
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
430 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
431
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
432 /**
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
433 * Returns the default class for a property name.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
434 *
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
435 * @param string $propertyName
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
436 * @return string
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
437 */
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
438 function getClassNameForPropertyName($propertyName) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
439
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
440 $className = parent::getClassNameForPropertyName($propertyName);
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
441 // In vCard 4, BINARY no longer exists, and we need URI instead.
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
442
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
443 if ($className == 'Sabre\\VObject\\Property\\Binary' && $this->getDocumentType()===self::VCARD40) {
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
444 return 'Sabre\\VObject\\Property\\Uri';
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
445 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
446 return $className;
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
447
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
448 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
449
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
450 }
430dbd5346f7 vendor sabre as distributed
Charlie Root
parents:
diff changeset
451