00001 <?php
00002
00014 class SMKMLPrinter extends SMWResultPrinter {
00021 public function __construct( $format, $inline ) {
00022 parent::__construct( $format, $inline );
00023 }
00024
00035 public function getResultText( SMWQueryResult $res, $outputmode ) {
00036 if ( $outputmode == SMW_OUTPUT_FILE ) {
00037 return $this->getKML( $res, $outputmode );
00038 }
00039 else {
00040 return $this->getLink( $res, $outputmode );
00041 }
00042 }
00043
00052 protected function handleParameters( array $params, $outputmode ) {
00053 $this->params = $params;
00054 }
00055
00063 public function getParameters() {
00064 global $egMapsDefaultLabel, $egMapsDefaultTitle;
00065
00066 $params = array_merge( parent::getParameters(), $this->exportFormatParameters() );
00067
00068 $params['text'] = new Parameter( 'text', Parameter::TYPE_STRING, $egMapsDefaultLabel );
00069 $params['text']->setMessage( 'semanticmaps-kml-text' );
00070
00071 $params['title'] = new Parameter( 'title', Parameter::TYPE_STRING, $egMapsDefaultTitle );
00072 $params['title']->setMessage( 'semanticmaps-kml-title' );
00073
00074 $params['linkabsolute'] = new Parameter( 'linkabsolute', Parameter::TYPE_BOOLEAN, true );
00075 $params['linkabsolute']->setMessage( 'semanticmaps-kml-linkabsolute' );
00076
00077 $params['pagelinktext'] = new Parameter( 'pagelinktext', Parameter::TYPE_STRING, wfMsg( 'semanticmaps-default-kml-pagelink' ) );
00078 $params['pagelinktext']->setMessage( 'semanticmaps-kml-pagelinktext' );
00079
00080 return $params;
00081 }
00082
00093 protected function getKML( SMWQueryResult $res, $outputmode ) {
00094 $queryHandler = new SMQueryHandler( $res, $outputmode, $this->params['linkabsolute'], $this->params['pagelinktext'], false );
00095 $queryHandler->setText( $this->params['text'] );
00096 $queryHandler->setTitle( $this->params['title'] );
00097 $queryHandler->setSubjectSeparator( '' );
00098
00099 $formatter = new MapsKMLFormatter( $this->params );
00100 $formatter->addPlacemarks( $queryHandler->getLocations() );
00101
00102 return $formatter->getKML();
00103 }
00104
00115 protected function getLink( SMWQueryResult $res, $outputmode ) {
00116 $searchLabel = $this->getSearchLabel( $outputmode );
00117 $link = $res->getQueryLink( $searchLabel ? $searchLabel : wfMsgForContent( 'semanticmaps-kml-link' ) );
00118 $link->setParameter( 'kml', 'format' );
00119 $link->setParameter( $this->params['linkabsolute'] ? 'yes' : 'no', 'linkabsolute' );
00120 $link->setParameter( $this->params['pagelinktext'], 'pagelinktext' );
00121
00122 if ( $this->params['title'] !== '' ) {
00123 $link->setParameter( $this->params['title'], 'title' );
00124 }
00125
00126 if ( $this->params['text'] !== '' ) {
00127 $link->setParameter( $this->params['text'], 'text' );
00128 }
00129
00130 if ( array_key_exists( 'limit', $this->params ) ) {
00131 $link->setParameter( $this->params['limit'], 'limit' );
00132 } else {
00133 $link->setParameter( 20, 'limit' );
00134 }
00135
00136 $this->isHTML = ( $outputmode == SMW_OUTPUT_HTML );
00137
00138 return $link->getText( $outputmode, $this->mLinker );
00139 }
00140
00144 public function getMimeType( $res ) {
00145 return 'application/vnd.google-earth.kml+xml';
00146 }
00147
00151 public function getFileName( $res ) {
00152
00153 return 'kml.kml';
00154 }
00155
00159 public final function getName() {
00160 return wfMsg( 'semanticmaps-kml' );
00161 }
00162 }