summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticResultFormats/src/vCard/vCardFileExportPrinter.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticResultFormats/src/vCard/vCardFileExportPrinter.php')
-rw-r--r--www/wiki/extensions/SemanticResultFormats/src/vCard/vCardFileExportPrinter.php543
1 files changed, 273 insertions, 270 deletions
diff --git a/www/wiki/extensions/SemanticResultFormats/src/vCard/vCardFileExportPrinter.php b/www/wiki/extensions/SemanticResultFormats/src/vCard/vCardFileExportPrinter.php
index 0769213d..6ca75fad 100644
--- a/www/wiki/extensions/SemanticResultFormats/src/vCard/vCardFileExportPrinter.php
+++ b/www/wiki/extensions/SemanticResultFormats/src/vCard/vCardFileExportPrinter.php
@@ -22,6 +22,7 @@ use WikiPage;
* @author Markus Krötzsch
* @author Denny Vrandecic
* @author Frank Dengler
+ * @author mwjames
*/
class vCardFileExportPrinter extends FileExportPrinter {
@@ -56,7 +57,14 @@ class vCardFileExportPrinter extends FileExportPrinter {
*/
public function getFileName( QueryResult $queryResult ) {
- if ( $this->getSearchLabel( SMW_OUTPUT_WIKI ) != '' ) {
+ if ( $this->params['filename'] !== '' ) {
+
+ if ( strpos( $this->params['filename'], '.vcf' ) === false ) {
+ $this->params['filename'] .= '.vcf';
+ }
+
+ return str_replace( ' ', '_', $this->params['filename'] );
+ } elseif ( $this->getSearchLabel( SMW_OUTPUT_WIKI ) != '' ) {
return str_replace( ' ', '_', $this->getSearchLabel( SMW_OUTPUT_WIKI ) ) . '.vcf';
}
@@ -75,44 +83,71 @@ class vCardFileExportPrinter extends FileExportPrinter {
}
/**
+ * @see ResultPrinter::getParamDefinitions
+ *
+ * @since 1.8
+ *
+ * {@inheritDoc}
+ */
+ public function getParamDefinitions( array $definitions ) {
+ $params = parent::getParamDefinitions( $definitions );
+
+ $params['filename'] = [
+ 'message' => 'smw-paramdesc-filename',
+ 'default' => 'vCard.vcf',
+ ];
+
+ return $params;
+ }
+
+ /**
* @see ResultPrinter::getResultText
*/
- protected function getResultText( QueryResult $res, $outputmode ) {
+ protected function getResultText( QueryResult $res, $outputMode ) {
- $result = '';
+ // Always return a link for when the output mode is not a file request,
+ // a file request is normally only initiated when resolving the query
+ // via Special:Ask
+ if ( $outputMode !== SMW_OUTPUT_FILE ) {
+ return $this->getVCardLink( $res, $outputMode );
+ }
- if ( $outputmode == SMW_OUTPUT_FILE ) { // make vCard file
- $result = $this->getVCardContent( $res );
- } else { // just make link to vcard
+ return $this->getVCardContent( $res );
+ }
- if ( $this->getSearchLabel( $outputmode ) ) {
- $label = $this->getSearchLabel( $outputmode );
- } else {
- $label = wfMessage( 'srf_vcard_link' )->inContentLanguage()->text();
- }
+ private function getVCardLink( QueryResult $res, $outputMode ) {
- $link = $res->getQueryLink( $label );
- $link->setParameter( 'vcard', 'format' );
+ // Can be viewed as HTML if requested, no more parsing needed
+ $this->isHTML = $outputMode == SMW_OUTPUT_HTML;
- if ( $this->getSearchLabel( SMW_OUTPUT_WIKI ) != '' ) {
- $link->setParameter( $this->getSearchLabel( SMW_OUTPUT_WIKI ), 'searchlabel' );
- }
+ if ( $this->getSearchLabel( $outputMode ) ) {
+ $label = $this->getSearchLabel( $outputMode );
+ } else {
+ $label = wfMessage( 'srf_vcard_link' )->inContentLanguage()->text();
+ }
- if ( array_key_exists( 'limit', $this->params ) ) {
- $link->setParameter( $this->params['limit'], 'limit' );
- } else { // use a reasonable default limit
- $link->setParameter( 20, 'limit' );
- }
+ $link = $res->getQueryLink( $label );
+ $link->setParameter( 'vcard', 'format' );
- $result .= $link->getText( $outputmode, $this->mLinker );
+ if ( $this->getSearchLabel( SMW_OUTPUT_WIKI ) != '' ) {
+ $link->setParameter( $this->getSearchLabel( SMW_OUTPUT_WIKI ), 'searchlabel' );
+ }
- // yes, our code can be viewed as HTML if requested, no more parsing needed
- $this->isHTML = ( $outputmode == SMW_OUTPUT_HTML );
+ if ( array_key_exists( 'limit', $this->params ) ) {
+ $link->setParameter( $this->params['limit'], 'limit' );
+ } else { // use a reasonable default limit
+ $link->setParameter( 20, 'limit' );
}
- return $result;
+ return $link->getText( $outputMode, $this->mLinker );
}
+ /**
+ * @param QueryResult $res
+ *
+ * @return string
+ * @throws \MWException
+ */
private function getVCardContent( $res ) {
$result = '';
@@ -147,250 +182,232 @@ class vCardFileExportPrinter extends FileExportPrinter {
private function newVCard( $row, $uri, $text, $timestamp, $isPublic ) {
- // 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 = [];
- $tels = [];
- $addresses = [];
- // 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":
- $fullname = $this->getFieldValue( $field );
- break;
- case "prefix":
- $prefix = $this->getFieldCommaList( $field );
- break;
- case "suffix":
- $suffix = $this->getFieldCommaList( $field );
- break;
- case "firstname":
- // save only the first
- $firstname = $this->getFieldValue( $field );
- break;
- case "extraname":
- $additionalname = $this->getFieldCommaList( $field );
- break;
- case "lastname":
- // save only the first
- $lastname = $this->getFieldValue( $field );
- break;
- case "note":
- $note = $this->getFieldCommaList( $field );
- break;
- case "category":
- $category = $this->getFieldCommaList( $field );
- case "email":
- while ( $value = $field->getNextDataValue() ) {
- $emails[] = new Email( 'INTERNET', $value->getShortWikiText() );
- }
- break;
- case "workphone":
- while ( $value = $field->getNextDataValue() ) {
- $tels[] = new Tel( 'WORK', $value->getShortWikiText() );
- }
- break;
- case "cellphone":
- while ( $value = $field->getNextDataValue() ) {
- $tels[] = new Tel( 'CELL', $value->getShortWikiText() );
- }
- break;
- case "homephone":
- while ( $value = $field->getNextDataValue() ) {
- $tels[] = new Tel( 'HOME', $value->getShortWikiText() );
- }
- break;
- case "organization":
- $organization = $this->getFieldValue( $field );
- break;
- case "workpostofficebox":
- if ( ( $workpostofficebox = $this->getFieldValue( $field ) ) !== '' ) {
- $workaddress = true;
- }
- break;
- case "workextendedaddress":
- if ( ( $workextendedaddress = $this->getFieldValue( $field ) ) !== '' ) {
- $workaddress = true;
- }
- break;
- case "workstreet":
- if ( ( $workstreet = $this->getFieldValue( $field ) ) !== '' ) {
- $workaddress = true;
- }
- break;
- case "worklocality":
- if ( ( $worklocality = $this->getFieldValue( $field ) ) !== '' ) {
- $workaddress = true;
- }
- break;
- case "workregion":
- if ( ( $workregion = $this->getFieldValue( $field ) ) !== '' ) {
- $workaddress = true;
- }
- break;
- case "workpostalcode":
- if ( ( $workpostalcode = $this->getFieldValue( $field ) ) !== '' ) {
- $workaddress = true;
- }
- break;
- case "workcountry":
- if ( ( $workcountry = $this->getFieldValue( $field ) ) !== '' ) {
- $workaddress = true;
- }
- break;
- case "homepostofficebox":
- if ( ( $homepostofficebox = $this->getFieldValue( $field ) ) !== '' ) {
- $homeaddress = true;
- }
- break;
- case "homeextendedaddress":
- if ( ( $homeextendedaddress = $this->getFieldValue( $field ) ) !== '' ) {
- $homeaddress = true;
- }
- break;
- case "homestreet":
- if ( ( $homestreet = $this->getFieldValue( $field ) ) !== '' ) {
- $homeaddress = true;
- }
- break;
- case "homelocality":
- if ( ( $homelocality = $this->getFieldValue( $field ) ) !== '' ) {
- $homeaddress = true;
- }
- break;
- case "homeregion":
- if ( ( $homeregion = $this->getFieldValue( $field ) ) !== '' ) {
- $homeaddress = true;
- }
- break;
- case "homepostalcode":
- if ( ( $homepostalcode = $this->getFieldValue( $field ) ) !== '' ) {
- $homeaddress = true;
- }
- break;
- case "homecountry":
- if ( ( $homecountry = $this->getFieldValue( $field ) ) !== '' ) {
- $homeaddress = true;
- }
- break;
- case "birthday":
- if ( $req->getTypeID() == TimeValue::TYPE_ID ) {
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $birthday = $value->getISO8601Date();
- }
- }
- break;
- case "homepage":
- if ( $req->getTypeID() == "_uri" ) {
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $url = $value->getWikiValue();
- }
- }
- break;
- }
- }
-
- if ( $workaddress ) {
- $addresses[] = new Address (
- 'WORK',
- [
- 'pobox' => $workpostofficebox,
- 'ext' => $workextendedaddress,
- 'street' => $workstreet,
- 'locality' => $worklocality,
- 'region' => $workregion,
- 'code' => $workpostalcode,
- 'country' => $workcountry
- ]
- );
- }
-
- if ( $homeaddress ) {
- $addresses[] = new Address (
- 'HOME',
- [
- 'pobox' => $homepostofficebox,
- 'ext' => $homeextendedaddress,
- 'street' => $homestreet,
- 'locality' => $homelocality,
- 'region' => $homeregion,
- 'code' => $homepostalcode,
- 'country' => $homecountry
- ]
- );
- }
-
$vCard = new vCard(
$uri,
$text,
[
- 'prefix' => $prefix,
- 'firstname' => $firstname,
- 'lastname' => $lastname,
- 'additionalname' => $additionalname,
- 'suffix' => $suffix,
- 'fullname' => $fullname,
- 'tel' => $tels,
- 'address' => $addresses,
- 'email' => $emails,
- 'birthday' => $birthday,
- 'title' => $jobtitle,
- 'role' => $role,
- 'organization' => $organization,
- 'department' => $department,
- 'category' => $category,
- 'url' => $url,
- 'note' => $note
+
+ // something like 'Dr.'
+ 'prefix' => '',
+
+ // given name
+ 'firstname' => '',
+
+ // family name
+ 'lastname' => '',
+
+ // typically the "middle" name (second first name)
+ 'additionalname' => '',
+
+ // things like "jun." or "sen."
+ 'suffix' => '',
+
+ // the "formatted name", may be independent from
+ // first/lastname & co.
+ 'fullname' => '',
+
+ 'tel' => [],
+ 'address' => [],
+ 'email' => [],
+ // a date
+ 'birthday' => '',
+
+ // organisational details
+ 'organization' => '',
+ 'department' => '',
+ 'title' => '',
+ 'role' => '',
+ 'category' => '',
+
+ // homepage, a legal URL
+ 'url' => '',
+
+ // any text
+ 'note' => ''
]
);
+ $tels = [];
+ $emails = [];
+
+ $addresses['work'] = new Address( 'WORK' );
+ $addresses['home'] = new Address( 'HOME' );
+
+ foreach ( $row as $field ) {
+ $this->mapField( $field, $vCard, $tels, $addresses, $emails );
+ }
+
+ $vCard->set( 'tel', $tels );
+ $vCard->set( 'address', $addresses );
+ $vCard->set( 'email', $emails );
+
$vCard->isPublic( $isPublic );
$vCard->setTimestamp( $timestamp );
return $vCard;
}
+ private function isPublic() {
+ // heuristic for setting confidentiality level of vCard:
+ global $wgGroupPermissions;
+
+ if ( ( array_key_exists( '*', $wgGroupPermissions ) ) && ( array_key_exists(
+ 'read',
+ $wgGroupPermissions['*']
+ ) ) ) {
+ return $wgGroupPermissions['*']['read'];
+ }
+
+ return true;
+ }
+
+ private function mapField( $field, $vCard, &$tels, &$addresses, &$emails ) {
+
+ $printRequest = $field->getPrintRequest();
+
+ switch ( strtolower( $printRequest->getLabel() ) ) {
+ case "name":
+ $vCard->set( 'fullname', $this->getFieldValue( $field ) );
+ break;
+ case "prefix":
+ $vCard->set( 'prefix', $this->getFieldCommaList( $field ) );
+ break;
+ case "suffix":
+ $vCard->set( 'suffix', $this->getFieldCommaList( $field ) );
+ break;
+ case "firstname":
+ // save only the first
+ $vCard->set( 'firstname', $this->getFieldValue( $field ) );
+ break;
+ case "additionalname":
+ case "extraname":
+ $vCard->set( 'additionalname', $this->getFieldCommaList( $field ) );
+ break;
+ case "lastname":
+ // save only the first
+ $vCard->set( 'lastname', $this->getFieldValue( $field ) );
+ break;
+ case "note":
+ $vCard->set( 'note', $this->getFieldCommaList( $field ) );
+ break;
+ case "category":
+ $vCard->set( 'category', $this->getFieldCommaList( $field ) );
+ case "email":
+ while ( $value = $field->getNextDataValue() ) {
+ $emails[] = new Email( 'INTERNET', $value->getShortWikiText() );
+ }
+ break;
+ case "workphone":
+ while ( $value = $field->getNextDataValue() ) {
+ $tels[] = new Tel( 'WORK', $value->getShortWikiText() );
+ }
+ break;
+ case "cellphone":
+ while ( $value = $field->getNextDataValue() ) {
+ $tels[] = new Tel( 'CELL', $value->getShortWikiText() );
+ }
+ break;
+ case "homephone":
+ while ( $value = $field->getNextDataValue() ) {
+ $tels[] = new Tel( 'HOME', $value->getShortWikiText() );
+ }
+ break;
+ case "organization":
+ $vCard->set( 'organization', $this->getFieldValue( $field ) );
+ break;
+ case "workpostofficebox":
+ if ( ( $workpostofficebox = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['work']->set( 'pobox', $workpostofficebox );
+ }
+ break;
+ case "workextendedaddress":
+ if ( ( $workextendedaddress = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['work']->set( 'ext', $workextendedaddress );
+ }
+ break;
+ case "workstreet":
+ if ( ( $workstreet = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['work']->set( 'street', $workstreet );
+ }
+ break;
+ case "worklocality":
+ if ( ( $worklocality = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['work']->set( 'locality', $worklocality );
+ }
+ break;
+ case "workregion":
+ if ( ( $workregion = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['work']->set( 'region', $workregion );
+ }
+ break;
+ case "workpostalcode":
+ if ( ( $workpostalcode = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['work']->set( 'code', $workpostalcode );
+ }
+ break;
+ case "workcountry":
+ if ( ( $workcountry = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['work']->set( 'country', $workcountry );
+ }
+ break;
+ case "homepostofficebox":
+ if ( ( $homepostofficebox = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['home']->set( 'pobox', $homepostofficebox );
+ }
+ break;
+ case "homeextendedaddress":
+ if ( ( $homeextendedaddress = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['home']->set( 'ext', $homeextendedaddress );
+ }
+ break;
+ case "homestreet":
+ if ( ( $homestreet = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['home']->set( 'street', $homestreet );
+ }
+ break;
+ case "homelocality":
+ if ( ( $homelocality = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['home']->set( 'locality', $homelocality );
+ }
+ break;
+ case "homeregion":
+ if ( ( $homeregion = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['home']->set( 'region', $homeregion );
+ }
+ break;
+ case "homepostalcode":
+ if ( ( $homepostalcode = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['home']->set( 'code', $homepostalcode );
+ }
+ break;
+ case "homecountry":
+ if ( ( $homecountry = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['home']->set( 'country', $homecountry );
+ }
+ break;
+ case "birthday":
+ if ( $printRequest->getTypeID() == TimeValue::TYPE_ID ) {
+ $value = $field->getNextDataValue();
+
+ if ( $value !== false ) {
+ $birthday = $value->getISO8601Date();
+ $vCard->set( 'birthday', $birthday );
+ }
+ }
+ break;
+ case "homepage":
+ if ( $printRequest->getTypeID() == "_uri" ) {
+ $value = $field->getNextDataValue();
+
+ if ( $value !== false ) {
+ $url = $value->getWikiValue();
+ $vCard->set( 'url', $url );
+ }
+ }
+ break;
+ }
+ }
+
private function getFieldCommaList( $field ) {
$list = '';
@@ -413,18 +430,4 @@ class vCardFileExportPrinter extends FileExportPrinter {
return $v;
}
- private function isPublic() {
- // heuristic for setting confidentiality level of vCard:
- global $wgGroupPermissions;
-
- if ( ( array_key_exists( '*', $wgGroupPermissions ) ) && ( array_key_exists(
- 'read',
- $wgGroupPermissions['*']
- ) ) ) {
- return $wgGroupPermissions['*']['read'];
- }
-
- return true;
- }
-
}