123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431 |
- <?php
- namespace Sabre\VObject\Component;
- use
- Sabre\VObject;
- class VCard extends VObject\Document {
-
- static public $defaultName = 'VCARD';
-
- private $version = null;
-
- static public $valueMap = array(
- 'BINARY' => 'Sabre\\VObject\\Property\\Binary',
- 'BOOLEAN' => 'Sabre\\VObject\\Property\\Boolean',
- 'CONTENT-ID' => 'Sabre\\VObject\\Property\\FlatText',
- 'DATE' => 'Sabre\\VObject\\Property\\VCard\\Date',
- 'DATE-TIME' => 'Sabre\\VObject\\Property\\VCard\\DateTime',
- 'DATE-AND-OR-TIME' => 'Sabre\\VObject\\Property\\VCard\\DateAndOrTime',
- 'FLOAT' => 'Sabre\\VObject\\Property\\Float',
- 'INTEGER' => 'Sabre\\VObject\\Property\\Integer',
- 'LANGUAGE-TAG' => 'Sabre\\VObject\\Property\\VCard\\LanguageTag',
- 'TIMESTAMP' => 'Sabre\\VObject\\Property\\VCard\\TimeStamp',
- 'TEXT' => 'Sabre\\VObject\\Property\\Text',
- 'TIME' => 'Sabre\\VObject\\Property\\Time',
- 'UNKNOWN' => 'Sabre\\VObject\\Property\\Unknown',
- 'URI' => 'Sabre\\VObject\\Property\\Uri',
- 'URL' => 'Sabre\\VObject\\Property\\Uri',
- 'UTC-OFFSET' => 'Sabre\\VObject\\Property\\UtcOffset',
- );
-
- static public $propertyMap = array(
-
- 'N' => 'Sabre\\VObject\\Property\\Text',
- 'FN' => 'Sabre\\VObject\\Property\\FlatText',
- 'PHOTO' => 'Sabre\\VObject\\Property\\Binary',
- 'BDAY' => 'Sabre\\VObject\\Property\\VCard\\DateAndOrTime',
- 'ADR' => 'Sabre\\VObject\\Property\\Text',
- 'LABEL' => 'Sabre\\VObject\\Property\\FlatText',
- 'TEL' => 'Sabre\\VObject\\Property\\FlatText',
- 'EMAIL' => 'Sabre\\VObject\\Property\\FlatText',
- 'MAILER' => 'Sabre\\VObject\\Property\\FlatText',
- 'GEO' => 'Sabre\\VObject\\Property\\FlatText',
- 'TITLE' => 'Sabre\\VObject\\Property\\FlatText',
- 'ROLE' => 'Sabre\\VObject\\Property\\FlatText',
- 'LOGO' => 'Sabre\\VObject\\Property\\Binary',
-
-
- 'ORG' => 'Sabre\\VObject\\Property\\Text',
- 'NOTE' => 'Sabre\\VObject\\Property\\FlatText',
- 'REV' => 'Sabre\\VObject\\Property\\VCard\\TimeStamp',
- 'SOUND' => 'Sabre\\VObject\\Property\\FlatText',
- 'URL' => 'Sabre\\VObject\\Property\\Uri',
- 'UID' => 'Sabre\\VObject\\Property\\FlatText',
- 'VERSION' => 'Sabre\\VObject\\Property\\FlatText',
- 'KEY' => 'Sabre\\VObject\\Property\\FlatText',
- 'TZ' => 'Sabre\\VObject\\Property\\Text',
-
- 'CATEGORIES' => 'Sabre\\VObject\\Property\\Text',
- 'SORT-STRING' => 'Sabre\\VObject\\Property\\FlatText',
- 'PRODID' => 'Sabre\\VObject\\Property\\FlatText',
- 'NICKNAME' => 'Sabre\\VObject\\Property\\Text',
- 'CLASS' => 'Sabre\\VObject\\Property\\FlatText',
-
- 'FBURL' => 'Sabre\\VObject\\Property\\Uri',
- 'CAPURI' => 'Sabre\\VObject\\Property\\Uri',
- 'CALURI' => 'Sabre\\VObject\\Property\\Uri',
-
- 'IMPP' => 'Sabre\\VObject\\Property\\Uri',
-
- 'XML' => 'Sabre\\VObject\\Property\\FlatText',
- 'ANNIVERSARY' => 'Sabre\\VObject\\Property\\VCard\\DateAndOrTime',
- 'CLIENTPIDMAP' => 'Sabre\\VObject\\Property\\Text',
- 'LANG' => 'Sabre\\VObject\\Property\\VCard\\LanguageTag',
- 'GENDER' => 'Sabre\\VObject\\Property\\Text',
- 'KIND' => 'Sabre\\VObject\\Property\\FlatText',
-
- 'BIRTHPLACE' => 'Sabre\\VObject\\Property\\FlatText',
- 'DEATHPLACE' => 'Sabre\\VObject\\Property\\FlatText',
- 'DEATHDATE' => 'Sabre\\VObject\\Property\\VCard\\DateAndOrTime',
-
- 'EXPERTISE' => 'Sabre\\VObject\\Property\\FlatText',
- 'HOBBY' => 'Sabre\\VObject\\Property\\FlatText',
- 'INTEREST' => 'Sabre\\VObject\\Property\\FlatText',
- 'ORG-DIRECTORY' => 'Sabre\\VObject\\Property\\FlatText',
- );
-
- public function getDocumentType() {
- if (!$this->version) {
- $version = (string)$this->VERSION;
- switch($version) {
- case '2.1' :
- $this->version = self::VCARD21;
- break;
- case '3.0' :
- $this->version = self::VCARD30;
- break;
- case '4.0' :
- $this->version = self::VCARD40;
- break;
- default :
- $this->version = self::UNKNOWN;
- break;
- }
- }
- return $this->version;
- }
-
- public function convert($target) {
- $converter = new VObject\VCardConverter();
- return $converter->convert($this, $target);
- }
-
- const DEFAULT_VERSION = self::VCARD21;
-
- 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) {
- $version = (string)$this->VERSION;
- if ($version!=='2.1' && $version!=='3.0' && $version!=='4.0') {
- $warnings[] = array(
- 'level' => 3,
- '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) {
- $repaired = false;
- if (($options & self::REPAIR) && count($fn) === 0) {
-
-
- 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];
- }
- $repaired = true;
-
- } elseif (isset($this->ORG)) {
- $this->FN = (string)$this->ORG;
- $repaired = true;
- }
- }
- $warnings[] = array(
- 'level' => $repaired?1:3,
- 'message' => 'The FN property must appear in the VCARD component exactly 1 time',
- 'node' => $this,
- );
- }
- return array_merge(
- parent::validate($options),
- $warnings
- );
- }
-
- public function getValidationRules() {
- return array(
- 'ADR' => '*',
- 'ANNIVERSARY' => '?',
- 'BDAY' => '?',
- 'CALADRURI' => '*',
- 'CALURI' => '*',
- 'CATEGORIES' => '*',
- 'CLIENTPIDMAP' => '*',
- 'EMAIL' => '*',
- 'FBURL' => '*',
- 'IMPP' => '*',
- 'GENDER' => '?',
- 'GEO' => '*',
- 'KEY' => '*',
- 'KIND' => '?',
- 'LANG' => '*',
- 'LOGO' => '*',
- 'MEMBER' => '*',
- 'N' => '?',
- 'NICKNAME' => '*',
- 'NOTE' => '*',
- 'ORG' => '*',
- 'PHOTO' => '*',
- 'PRODID' => '?',
- 'RELATED' => '*',
- 'REV' => '?',
- 'ROLE' => '*',
- 'SOUND' => '*',
- 'SOURCE' => '*',
- 'TEL' => '*',
- 'TITLE' => '*',
- 'TZ' => '*',
- 'URL' => '*',
- 'VERSION' => '1',
- 'XML' => '*',
-
-
-
-
-
-
-
-
-
-
-
-
- 'UID' => '1',
- );
- }
-
- public function preferred($propertyName) {
- $preferred = null;
- $lastPref = 101;
- foreach($this->select($propertyName) as $field) {
- $pref = 101;
- if (isset($field['TYPE']) && $field['TYPE']->has('PREF')) {
- $pref = 1;
- } elseif (isset($field['PREF'])) {
- $pref = $field['PREF']->getValue();
- }
- if ($pref < $lastPref || is_null($preferred)) {
- $preferred = $field;
- $lastPref = $pref;
- }
- }
- return $preferred;
- }
-
- protected function getDefaults() {
- return array(
- 'VERSION' => '3.0',
- 'PRODID' => '-//Sabre//Sabre VObject ' . VObject\Version::VERSION . '//EN',
- );
- }
-
- public function jsonSerialize() {
-
-
- $properties = array();
- foreach($this->children as $child) {
- $properties[] = $child->jsonSerialize();
- }
- return array(
- strtolower($this->name),
- $properties,
- );
- }
-
- public function getClassNameForPropertyName($propertyName) {
- $className = parent::getClassNameForPropertyName($propertyName);
-
- if ($className == 'Sabre\\VObject\\Property\\Binary' && $this->getDocumentType()===self::VCARD40) {
- return 'Sabre\\VObject\\Property\\Uri';
- }
- return $className;
- }
- }
|