Mercurial > hg > rc1
comparison plugins/libcalendaring/lib/Sabre/VObject/Component/VCard.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\Component; | |
4 | |
5 use Sabre\VObject; | |
6 | |
7 /** | |
8 * The VCard component | |
9 * | |
10 * This component represents the BEGIN:VCARD and END:VCARD found in every | |
11 * vcard. | |
12 * | |
13 * @copyright Copyright (C) 2007-2013 fruux GmbH (https://fruux.com/). | |
14 * @author Evert Pot (http://evertpot.com/) | |
15 * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License | |
16 */ | |
17 class VCard extends VObject\Component { | |
18 | |
19 static $defaultName = 'VCARD'; | |
20 | |
21 /** | |
22 * VCards with version 2.1, 3.0 and 4.0 are found. | |
23 * | |
24 * If the VCARD doesn't know its version, 4.0 is assumed. | |
25 */ | |
26 const DEFAULT_VERSION = '4.0'; | |
27 | |
28 /** | |
29 * Validates the node for correctness. | |
30 * | |
31 * The following options are supported: | |
32 * - Node::REPAIR - If something is broken, and automatic repair may | |
33 * be attempted. | |
34 * | |
35 * An array is returned with warnings. | |
36 * | |
37 * Every item in the array has the following properties: | |
38 * * level - (number between 1 and 3 with severity information) | |
39 * * message - (human readable message) | |
40 * * node - (reference to the offending node) | |
41 * | |
42 * @param int $options | |
43 * @return array | |
44 */ | |
45 public function validate($options = 0) { | |
46 | |
47 $warnings = array(); | |
48 | |
49 $version = $this->select('VERSION'); | |
50 if (count($version)!==1) { | |
51 $warnings[] = array( | |
52 'level' => 1, | |
53 'message' => 'The VERSION property must appear in the VCARD component exactly 1 time', | |
54 'node' => $this, | |
55 ); | |
56 if ($options & self::REPAIR) { | |
57 $this->VERSION = self::DEFAULT_VERSION; | |
58 } | |
59 } else { | |
60 $version = (string)$this->VERSION; | |
61 if ($version!=='2.1' && $version!=='3.0' && $version!=='4.0') { | |
62 $warnings[] = array( | |
63 'level' => 1, | |
64 'message' => 'Only vcard version 4.0 (RFC6350), version 3.0 (RFC2426) or version 2.1 (icm-vcard-2.1) are supported.', | |
65 'node' => $this, | |
66 ); | |
67 if ($options & self::REPAIR) { | |
68 $this->VERSION = '4.0'; | |
69 } | |
70 } | |
71 | |
72 } | |
73 $fn = $this->select('FN'); | |
74 if (count($fn)!==1) { | |
75 $warnings[] = array( | |
76 'level' => 1, | |
77 'message' => 'The FN property must appear in the VCARD component exactly 1 time', | |
78 'node' => $this, | |
79 ); | |
80 if (($options & self::REPAIR) && count($fn) === 0) { | |
81 // We're going to try to see if we can use the contents of the | |
82 // N property. | |
83 if (isset($this->N)) { | |
84 $value = explode(';', (string)$this->N); | |
85 if (isset($value[1]) && $value[1]) { | |
86 $this->FN = $value[1] . ' ' . $value[0]; | |
87 } else { | |
88 $this->FN = $value[0]; | |
89 } | |
90 | |
91 // Otherwise, the ORG property may work | |
92 } elseif (isset($this->ORG)) { | |
93 $this->FN = (string)$this->ORG; | |
94 } | |
95 | |
96 } | |
97 } | |
98 | |
99 return array_merge( | |
100 parent::validate($options), | |
101 $warnings | |
102 ); | |
103 | |
104 } | |
105 | |
106 } | |
107 |