summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'SemanticResultFormats/formats/vcard/SRF_vCard.php')
-rw-r--r--SemanticResultFormats/formats/vcard/SRF_vCard.php569
1 files changed, 0 insertions, 569 deletions
diff --git a/SemanticResultFormats/formats/vcard/SRF_vCard.php b/SemanticResultFormats/formats/vcard/SRF_vCard.php
deleted file mode 100644
index 20f76429..00000000
--- a/SemanticResultFormats/formats/vcard/SRF_vCard.php
+++ /dev/null
@@ -1,569 +0,0 @@
-<?php
-/**
- * Create vCard exports
- * @file
- * @ingroup SemanticResultFormats
- */
-
-/**
- * Printer class for creating vCard exports
- *
- * @author Markus Krötzsch
- * @author Denny Vrandecic
- * @author Frank Dengler
- *
- * @ingroup SemanticResultFormats
- *
- * TODO: fix the insane case
- * TODO: make SRFvCardAddress constructor sane
- */
-class SRFvCard extends SMWExportPrinter {
-
- protected $m_title = '';
- protected $m_description = '';
-
- /**
- * @see SMWIExportPrinter::getMimeType
- *
- * @since 1.8
- *
- * @param SMWQueryResult $queryResult
- *
- * @return string
- */
- public function getMimeType( SMWQueryResult $queryResult ) {
- return 'text/x-vcard';
- }
-
- /**
- * @see SMWIExportPrinter::getFileName
- *
- * @since 1.8
- *
- * @param SMWQueryResult $queryResult
- *
- * @return string|boolean
- */
- public function getFileName( SMWQueryResult $queryResult ) {
- if ( $this->getSearchLabel( SMW_OUTPUT_WIKI ) != '' ) {
- return str_replace( ' ', '_', $this->getSearchLabel( SMW_OUTPUT_WIKI ) ) . '.vcf';
- } else {
- return 'vCard.vcf';
- }
- }
-
- public function getQueryMode( $context ) {
- return ( $context == SMWQueryProcessor::SPECIAL_PAGE ) ? SMWQuery::MODE_INSTANCES : SMWQuery::MODE_NONE;
- }
-
- public function getName() {
- return wfMessage( 'srf_printername_vcard' )->text();
- }
-
- protected function getResultText( SMWQueryResult $res, $outputmode ) {
- global $wgSitename;
- $result = '';
- $items = array();
- if ( $outputmode == SMW_OUTPUT_FILE ) { // make vCard file
- if ( $this->m_title == '' ) {
- $this->m_title = $wgSitename;
- }
- $row = $res->getNext();
- while ( $row !== false ) {
- $wikipage = $row[0]->getResultSubject(); // get Subject of the Result
- // name
- $prefix = ''; // something like 'Dr.'
- $firstname = ''; // given name
- $additionalname = ''; // typically the "middle" name (second first name)
- $lastname = ''; // family name
- $suffix = ''; // things like "jun." or "sen."
- $fullname = ''; // the "formatted name", may be independent from first/lastname & co.
- // contacts
- $emails = array();
- $tels = array();
- $addresses = array();
- // organisational details:
- $organization = ''; // any string
- $jobtitle = '';
- $role = '';
- $department = '';
- // other stuff
- $category = '';
- $birthday = ''; // a date
- $url = ''; // homepage, a legal URL
- $note = ''; // any text
- $workaddress = false;
- $homeaddress = false;
-
- $workpostofficebox = '';
- $workextendedaddress = '';
- $workstreet = '';
- $worklocality = '';
- $workregion = '';
- $workpostalcode = '';
- $workcountry = '';
-
-
- $homepostofficebox = '';
- $homeextendedaddress = '';
- $homestreet = '';
- $homelocality = '';
- $homeregion = '';
- $homepostalcode = '';
- $homecountry = '';
-
- foreach ( $row as $field ) {
- // later we may add more things like a generic
- // mechanism to add non-standard vCard properties as well
- // (could include funny things like geo, description etc.)
- $req = $field->getPrintRequest();
-
- switch( strtolower( $req->getLabel() ) ) {
- case "name":
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $fullname = $value->getShortWikiText();
- }
- break;
-
- case "prefix":
- while( $value = $field->getNextDataValue() ) {
- $prefix .= ( $prefix ? ',':'' ) . $value->getShortWikiText();
- }
- break;
-
- case "suffix":
- while( $value = $field->getNextDataValue() ) {
- $suffix .= ( $suffix ? ',':'' ) . $value->getShortWikiText();
- }
- break;
-
- case "firstname":
- $value = $field->getNextDataValue(); // save only the first
- if ( $value !== false ) {
- $firstname = $value->getShortWikiText();
- }
- break;
-
- case "extraname":
- while( $value = $field->getNextDataValue() ) {
- $additionalname .= ( $additionalname ? ',':'' ) . $value->getShortWikiText();
- }
- break;
-
- case "lastname":
- $value = $field->getNextDataValue(); // save only the first
- if ( $value !== false ) {
- $lastname = $value->getShortWikiText();
- }
- break;
-
- case "note":
- while( $value = $field->getNextDataValue() ) {
- $note .= ( $note ? ', ':'' ) . $value->getShortWikiText();
- }
- break;
-
- case "email":
- while( $value = $field->getNextDataValue() ) {
- $emails[] = new SRFvCardEmail( 'internet', $value->getShortWikiText() );
- }
- break;
-
- case "workphone":
- while( $value = $field->getNextDataValue() ) {
- $tels[] = new SRFvCardTel( 'WORK', $value->getShortWikiText() );
- }
- break;
-
- case "cellphone":
- while( $value = $field->getNextDataValue() ) {
- $tels[] = new SRFvCardTel( 'CELL', $value->getShortWikiText() );
- }
- break;
-
- case "homephone":
- while( $value = $field->getNextDataValue() ) {
- $tels[] = new SRFvCardTel( 'HOME', $value->getShortWikiText() );
- }
- break;
-
- case "organization":
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $organization = $value->getShortWikiText();
- }
- break;
-
- case "workpostofficebox":
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $workpostofficebox = $value->getShortWikiText();
- $workaddress = true;
- }
- break;
-
- case "workextendedaddress":
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $workextendedaddress = $value->getShortWikiText();
- $workaddress = true;
- }
- break;
-
- case "workstreet":
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $workstreet = $value->getShortWikiText();
- $workaddress = true;
- }
- break;
-
- case "worklocality":
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $worklocality = $value->getShortWikiText();
- $workaddress = true;
- }
- break;
-
- case "workregion":
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $workregion = $value->getShortWikiText();
- $workaddress = true;
- }
- break;
-
- case "workpostalcode":
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $workpostalcode = $value->getShortWikiText();
- $workaddress = true;
- }
- break;
-
- case "workcountry":
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $workcountry = $value->getShortWikiText();
- $workaddress = true;
- }
- break;
-
- case "homepostofficebox":
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $homepostofficebox = $value->getShortWikiText();
- $homeaddress = true;
- }
- break;
-
- case "homeextendedaddress":
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $homeextendedaddress = $value->getShortWikiText();
- $homeaddress = true;
- }
- break;
-
- case "homestreet":
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $homestreet = $value->getShortWikiText();
- $homeaddress = true;
- }
- break;
-
- case "homelocality":
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $homelocality = $value->getShortWikiText();
- $homeaddress = true;
- }
- break;
-
- case "homeregion":
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $homeregion = $value->getShortWikiText();
- $homeaddress = true;
- }
- break;
-
- case "homepostalcode":
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $homepostalcode = $value->getShortWikiText();
- $homeaddress = true;
- }
- break;
-
- case "homecountry":
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $homecountry = $value->getShortWikiText();
- $homeaddress = true;
- }
- break;
-
- case "birthday":
- if ( $req->getTypeID() == "_dat" ) {
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $birthday = $value->getXMLSchemaDate();
- }
- }
- break;
-
- case "homepage":
- if ( $req->getTypeID() == "_uri" ) {
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $url = $value->getWikiValue();
- }
- }
- break;
- }
- }
- $pagetitle = $wikipage->getTitle();
- if ( $workaddress ) $addresses[] = new SRFvCardAddress ( 'WORK', $workpostofficebox, $workextendedaddress, $workstreet, $worklocality, $workregion, $workpostalcode, $workcountry );
- if ( $homeaddress ) $addresses[] = new SRFvCardAddress ( 'HOME', $homepostofficebox, $homeextendedaddress, $homestreet, $homelocality, $homeregion, $homepostalcode, $homecountry );
- $items[] = new SRFvCardEntry( $pagetitle, $prefix, $firstname, $lastname, $additionalname, $suffix, $fullname, $tels, $addresses, $emails, $birthday, $jobtitle, $role, $organization, $department, $category, $url, $note );
- $row = $res->getNext();
- }
- foreach ( $items as $item ) {
- $result .= $item->text();
- }
- } else { // just make link to vcard
- if ( $this->getSearchLabel( $outputmode ) ) {
- $label = $this->getSearchLabel( $outputmode );
- } else {
- $label = wfMessage( 'srf_vcard_link' )->inContentLanguage()->text();
- }
- $link = $res->getQueryLink( $label );
- $link->setParameter( 'vcard', 'format' );
- if ( $this->getSearchLabel( SMW_OUTPUT_WIKI ) != '' ) {
- $link->setParameter( $this->getSearchLabel( SMW_OUTPUT_WIKI ), 'searchlabel' );
- }
- if ( array_key_exists( 'limit', $this->m_params ) ) {
- $link->setParameter( $this->m_params['limit'], 'limit' );
- } else { // use a reasonable default limit
- $link->setParameter( 20, 'limit' );
- }
- $result .= $link->getText( $outputmode, $this->mLinker );
- $this->isHTML = ( $outputmode == SMW_OUTPUT_HTML ); // yes, our code can be viewed as HTML if requested, no more parsing needed
- }
- return $result;
- }
-}
-
-/**
- * Represents a single entry in an vCard
- * @ingroup SemanticResultFormats
- */
-class SRFvCardEntry {
- private $uri;
- private $label;
- private $fullname;
- private $firstname;
- private $lastname;
- private $additionalname;
- private $prefix;
- private $suffix;
- private $tels = array();
- private $addresses = array();
- private $emails = array();
- private $birthday;
- private $dtstamp;
- private $title;
- private $role;
- private $organization;
- private $department;
- private $category;
- private $note;
-
- /**
- * Constructor for a single item in the vcard. Requires the URI of the item.
- */
- public function __construct( Title $t, $prefix, $firstname, $lastname, $additionalname, $suffix, $fullname, $tels, $addresses, $emails, $birthday, $jobtitle, $role, $organization, $department, $category, $url, $note ) {
- $this->uri = $t->getFullURL();
- $this->url = $url;
- // read fullname or guess it in a simple way from other names that are given
- if ( $fullname != '' ) {
- $this->label = $fullname;
- } elseif ( $firstname . $lastname != '' ) {
- $this->label = $firstname . ( ( ( $firstname != '' ) && ( $lastname != '' ) ) ? ' ':'' ) . $lastname;
- } else {
- $this->label = $t->getText();
- }
- $this->label = SRFVCardEntry::vCardEscape( $this->label );
- // read firstname and lastname, or guess it from other names that are given
- if ( $firstname . $lastname == '' ) { // guessing needed
- $nameparts = explode( ' ', $this->label );
- // Accepted forms for guessing:
- // "Lastname"
- // "Firstname Lastname"
- // "Firstname <Additionalnames> Lastname"
- $this->lastname = SRFvCardEntry::vCardEscape( array_pop( $nameparts ) );
- if ( count( $nameparts ) > 0 ) $this->firstname = SRFvCardEntry::vCardEscape( array_shift( $nameparts ) );
- foreach ( $nameparts as $name ) {
- $this->additionalname .= ( $this->additionalname != '' ? ',':'' ) . SRFvCardEntry::vCardEscape( $name );
- }
- } else {
- $this->firstname = SRFvCardEntry::vCardEscape( $firstname );
- $this->lastname = SRFvCardEntry::vCardEscape( $lastname );
- }
- if ( $additionalname != '' ) $this->additionalname = $additionalname; // no escape, can be a value list
- // ^ overwrite above guessing in that case
- $this->prefix = SRFvCardEntry::vCardEscape( $prefix );
- $this->suffix = SRFvCardEntry::vCardEscape( $suffix );
- $this->tels = $tels;
- $this->addresses = $addresses;
- $this->emails = $emails;
- $this->birthday = $birthday;
- $this->title = SRFvCardEntry::vCardEscape( $jobtitle );
- $this->role = SRFvCardEntry::vCardEscape( $role );
- $this->organization = SRFvCardEntry::vCardEscape( $organization );
- $this->department = SRFvCardEntry::vCardEscape( $department );
- $this->category = $category; // allow non-escaped "," in here for making a list of categories
- $this->note = SRFvCardEntry::vCardEscape( $note );
-
- $article = new Article( $t );
- $this->dtstamp = $article->getTimestamp();
- }
-
-
- /**
- * Creates the vCard output for a single item.
- *
- * CAUTION: this might hurt your eyes
- */
- public function text() {
- $text = "BEGIN:VCARD\r\n";
- $text .= "VERSION:3.0\r\n";
- // N and FN are required properties in vCard 3.0, we need to write something there
- $text .= "N;CHARSET=UTF-8:$this->lastname;$this->firstname;$this->additionalname;$this->prefix;$this->suffix\r\n";
- $text .= "FN;CHARSET=UTF-8:$this->label\r\n";
- // heuristic for setting confidentiality level of vCard:
- global $wgGroupPermissions;
- if ( ( array_key_exists( '*', $wgGroupPermissions ) ) &&
- ( array_key_exists( 'read', $wgGroupPermissions['*'] ) ) ) {
- $public = $wgGroupPermissions['*']['read'];
- } else {
- $public = true;
- }
- $text .= ( $public ? 'CLASS:PUBLIC':'CLASS:CONFIDENTIAL' ) . "\r\n";
- if ( $this->birthday !== "" ) $text .= "BDAY:$this->birthday\r\n";
- if ( $this->title !== "" ) $text .= "TITLE;CHARSET=UTF-8:$this->title\r\n";
- if ( $this->role !== "" ) $text .= "ROLE;CHARSET=UTF-8:$this->role\r\n";
- if ( $this->organization !== "" ) $text .= "ORG;CHARSET=UTF-8:$this->organization;$this->department\r\n";
- if ( $this->category !== "" ) $text .= "CATEGORIES;CHARSET=UTF-8:$this->category\r\n";
- foreach ( $this->emails as $entry ) $text .= $entry->createVCardEmailText();
- foreach ( $this->addresses as $entry ) $text .= $entry->createVCardAddressText();
- foreach ( $this->tels as $entry ) $text .= $entry->createVCardTelText();
- if ( $this->note !== "" ) $text .= "NOTE;CHARSET=UTF-8:$this->note\r\n";
- $text .= "SOURCE;CHARSET=UTF-8:$this->uri\r\n";
- $text .= "PRODID:-////Semantic MediaWiki\r\n";
- $text .= "REV:$this->dtstamp\r\n";
- $text .= "URL:" . ( $this->url ? $this->url:$this->uri ) . "\r\n";
- $text .= "UID:$this->uri\r\n";
- $text .= "END:VCARD\r\n";
- return $text;
- }
-
- public static function vCardEscape( $text ) {
- return str_replace( array( '\\', ',', ':', ';' ), array( '\\\\', '\,', '\:', '\;' ), $text );
- }
-
-}
-
-/**
- * Represents a single address entry in an vCard entry.
- * @ingroup SemanticResultFormats
- */
-class SRFvCardAddress {
- private $type;
- private $postofficebox;
- private $extendedaddress;
- private $street;
- private $locality;
- private $region;
- private $postalcode;
- private $country;
-
- /**
- * Constructor for a single address item in the vcard item.
- */
- public function __construct( $type, $postofficebox, $extendedaddress, $street, $locality, $region, $postalcode, $country ) {
- $this->type = $type;
- $this->postofficebox = SRFvCardEntry::vCardEscape( $postofficebox );
- $this->extendedaddress = SRFvCardEntry::vCardEscape( $extendedaddress );
- $this->street = SRFvCardEntry::vCardEscape( $street );
- $this->locality = SRFvCardEntry::vCardEscape( $locality );
- $this->region = SRFvCardEntry::vCardEscape( $region );
- $this->postalcode = SRFvCardEntry::vCardEscape( $postalcode );
- $this->country = SRFvCardEntry::vCardEscape( $country );
- }
-
- /**
- * Creates the vCard output for a single address item.
- */
- public function createVCardAddressText() {
- if ( $this->type == "" ) $this->type = "work";
- $text = "ADR;TYPE=$this->type;CHARSET=UTF-8:$this->postofficebox;$this->extendedaddress;$this->street;$this->locality;$this->region;$this->postalcode;$this->country\r\n";
- return $text;
- }
-}
-
-/**
- * Represents a single telephone entry in an vCard entry.
- * @ingroup SemanticResultFormats
- */
-class SRFvCardTel {
- private $type;
- private $telnumber;
-
- /**
- * Constructor for a single telephone item in the vcard item.
- */
- public function __construct( $type, $telnumber ) {
- $this->type = $type; // may be a vCard value list using ",", no escaping
- $this->telnumber = SRFvCardEntry::vCardEscape( $telnumber ); // escape to be sure
- }
-
- /**
- * Creates the vCard output for a single telephone item.
- */
- public function createVCardTelText() {
- if ( $this->type == "" ) $this->type = "work";
- $text = "TEL;TYPE=$this->type:$this->telnumber\r\n";
- return $text;
- }
-}
-
-/**
- * Represents a single email entry in an vCard entry.
- * @ingroup SemanticResultFormats
- */
-class SRFvCardEmail {
- private $type;
- private $emailaddress;
-
- /**
- * Constructor for a email telephone item in the vcard item.
- */
- public function __construct( $type, $emailaddress ) {
- $this->type = $type;
- $this->emailaddress = $emailaddress; // no escape, normally not needed anyway
- }
-
- /**
- * Creates the vCard output for a single email item.
- */
- public function createVCardEmailText() {
- if ( $this->type == "" ) $this->type = "internet";
- $text = "EMAIL;TYPE=$this->type:$this->emailaddress\r\n";
- return $text;
- }
-}