| Current File : /home/jvzmxxx/wiki/extensions/Maps/SemanticMaps/src/queryprinters/SM_KMLPrinter.php |
<?php
use ParamProcessor\ParamDefinition;
use SMW\FileExportPrinter;
/**
* SMWResultPrinter class for printing a query result as KML.
*
* @file SM_KMLPrinter.php
* @ingroup SemanticMaps
*
* @licence GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class SMKMLPrinter extends FileExportPrinter {
/**
* Handler of the print request.
*
* @param SMWQueryResult $res
* @param $outputmode
*
* @return array
*/
public function getResultText( SMWQueryResult $res, $outputmode ) {
if ( $outputmode == SMW_OUTPUT_FILE ) {
return $this->getKML( $res, $outputmode );
}
else {
return $this->getKMLLink( $res, $outputmode );
}
}
/**
* @see SMWResultPrinter::handleParameters
*
* @param array $params
* @param $outputmode
*/
protected function handleParameters( array $params, $outputmode ) {
$this->params = $params;
}
/**
* @see SMWResultPrinter::getParamDefinitions
*
* @param ParamDefinition[] $definitions
*
* @return array of ParamDefinition|array
*/
public function getParamDefinitions( array $definitions ) {
global $egMapsDefaultLabel, $egMapsDefaultTitle;
$params = parent::getParamDefinitions( $definitions );
$params['text'] = [
'message' => 'semanticmaps-kml-text',
'default' => $egMapsDefaultLabel,
];
$params['title'] = [
'message' => 'semanticmaps-kml-title',
'default' => $egMapsDefaultTitle,
];
$params['linkabsolute'] = [
'message' => 'semanticmaps-kml-linkabsolute',
'type' => 'boolean',
'default' => true,
];
$params['pagelinktext'] = [
'message' => 'semanticmaps-kml-pagelinktext',
'default' => wfMessage( 'semanticmaps-default-kml-pagelink' )->text(),
];
return $params;
}
/**
* Returns the KML for the query result.
*
* @param SMWQueryResult $res
* @param integer $outputmode
*
* @return string
*/
private function getKML( SMWQueryResult $res, $outputmode ) {
$queryHandler = new SMQueryHandler( $res, $outputmode, $this->params['linkabsolute'], $this->params['pagelinktext'], false );
$queryHandler->setText( $this->params['text'] );
$queryHandler->setTitle( $this->params['title'] );
$queryHandler->setSubjectSeparator( '' );
$formatter = new MapsKMLFormatter( $this->params );
$shapes = $queryHandler->getShapes();
$formatter->addPlacemarks( $shapes['locations'] );
return $formatter->getKML();
}
/**
* Returns a link (HTML) pointing to a query that returns the actual KML file.
*
* @param SMWQueryResult $res
* @param integer $outputmode
*
* @return string
*/
private function getKMLLink( SMWQueryResult $res, $outputmode ) {
$searchLabel = $this->getSearchLabel( $outputmode );
$link = $res->getQueryLink( $searchLabel ? $searchLabel : wfMessage( 'semanticmaps-kml-link' )->inContentLanguage()->text() );
$link->setParameter( 'kml', 'format' );
$link->setParameter( $this->params['linkabsolute'] ? 'yes' : 'no', 'linkabsolute' );
$link->setParameter( $this->params['pagelinktext'], 'pagelinktext' );
if ( $this->params['title'] !== '' ) {
$link->setParameter( $this->params['title'], 'title' );
}
if ( $this->params['text'] !== '' ) {
$link->setParameter( $this->params['text'], 'text' );
}
// Fix for offset-error in getQueryLink()
// (getQueryLink by default sets offset to point to the next
// result set, fix by setting it to 0 if now explicitly set)
if ( array_key_exists( 'offset', $this->params ) ) {
$link->setParameter( $this->params['offset'], 'offset' );
} else {
$link->setParameter( 0, 'offset' );
}
if ( array_key_exists( 'limit', $this->params ) ) {
$link->setParameter( $this->params['limit'], 'limit' );
} else { // Use a reasonable default limit.
$link->setParameter( 20, 'limit' );
}
$this->isHTML = ( $outputmode == SMW_OUTPUT_HTML );
return $link->getText( $outputmode, $this->mLinker );
}
/**
* @see SMWIExportPrinter::getMimeType
*
* @param SMWQueryResult $queryResult
*
* @return string
*/
public function getMimeType( SMWQueryResult $queryResult ) {
return 'application/vnd.google-earth.kml+xml';
}
/**
* @see SMWIExportPrinter::getFileName
*
* @param SMWQueryResult $queryResult
*
* @return string|boolean
*/
public function getFileName( SMWQueryResult $queryResult ) {
return 'kml.kml';
}
/**
* @see SMWResultPrinter::getName()
*/
public final function getName() {
return wfMessage( 'semanticmaps-kml' )->text();
}
}