Ejemplo n.º 1
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();
     $versionMap = array(self::VCARD21 => '2.1', self::VCARD30 => '3.0', self::VCARD40 => '4.0');
     $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 = $versionMap[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 = $versionMap[self::DEFAULT_VERSION];
             }
         }
     }
     $fn = $this->select('FN');
     if (count($fn) !== 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($fn) === 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);
 }
Ejemplo n.º 2
0
 /**
  * Validates the node for correctness.
  * 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)
  *
  * @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 VCALENDAR component exactly 1 time', 'node' => $this);
     } else {
         if ((string) $this->VERSION !== '2.0') {
             $warnings[] = array('level' => 1, 'message' => 'Only iCalendar version 2.0 as defined in rfc5545 is supported.', 'node' => $this);
         }
     }
     $version = $this->select('PRODID');
     if (count($version) !== 1) {
         $warnings[] = array('level' => 2, 'message' => 'The PRODID property must appear in the VCALENDAR component exactly 1 time', 'node' => $this);
     }
     if (count($this->CALSCALE) > 1) {
         $warnings[] = array('level' => 2, 'message' => 'The CALSCALE property must not be specified more than once.', 'node' => $this);
     }
     if (count($this->METHOD) > 1) {
         $warnings[] = array('level' => 2, 'message' => 'The METHOD property must not be specified more than once.', 'node' => $this);
     }
     $componentsFound = 0;
     foreach ($this->children as $child) {
         if ($child instanceof Component) {
             $componentsFound++;
         }
     }
     if ($componentsFound === 0) {
         $warnings[] = array('level' => 1, 'message' => 'An iCalendar object must have at least 1 component.', 'node' => $this);
     }
     return array_merge($warnings, parent::validate());
 }