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'; } } } $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 ); } }