Blame view

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