diff options
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/includes/queryprinters/EmbeddedResultPrinter.php')
-rw-r--r-- | www/wiki/extensions/SemanticMediaWiki/includes/queryprinters/EmbeddedResultPrinter.php | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/includes/queryprinters/EmbeddedResultPrinter.php b/www/wiki/extensions/SemanticMediaWiki/includes/queryprinters/EmbeddedResultPrinter.php new file mode 100644 index 00000000..d067a255 --- /dev/null +++ b/www/wiki/extensions/SemanticMediaWiki/includes/queryprinters/EmbeddedResultPrinter.php @@ -0,0 +1,155 @@ +<?php + +namespace SMW; + +use SMWQueryResult; +use Title; + +/** + * Printer for embedded data. + * + * Embeds in the page output the contents of the pages in the query result set. + * Printouts are ignored: it only matters which pages were returned by the query. + * The optional "titlestyle" formatting parameter can be used to apply a format to + * the headings for the page titles. If "titlestyle" is not specified, a <h1> tag is + * used. + * + * @license GNU GPL v2+ + * @since 1.7 + * + * @author Fernando Correia + * @author Markus Krötzsch + */ +class EmbeddedResultPrinter extends ResultPrinter { + + protected $m_showhead; + protected $m_embedformat; + + /** + * @see SMWResultPrinter::handleParameters + * + * @since 1.7 + * + * @param array $params + * @param $outputmode + */ + protected function handleParameters( array $params, $outputmode ) { + parent::handleParameters( $params, $outputmode ); + + $this->m_showhead = !$params['embedonly']; + $this->m_embedformat = $params['embedformat']; + } + + public function getName() { + return wfMessage( 'smw_printername_embedded' )->text(); + } + + /** + * @see ResultPrinter::isDeferrable + * + * {@inheritDoc} + */ + public function isDeferrable() { + return true; + } + + protected function getResultText( SMWQueryResult $res, $outputMode ) { + + // Ensure that there is an annotation block in place before starting the + // parse and transclution process. Unfortunately we are unable to block + // the inclusion of categories which are attached to a MediaWiki + // object we have no immediate access or control. + $this->transcludeAnnotation = false; + + global $wgParser; + // No page should embed itself, find out who we are: + if ( $wgParser->getTitle() instanceof Title ) { + $title = $wgParser->getTitle()->getPrefixedText(); + } else { // this is likely to be in vain -- this case is typical if we run on special pages + global $wgTitle; + $title = $wgTitle->getPrefixedText(); + } + + // print header + $result = ''; + $footer = ''; + $embstart = ''; + $embend = ''; + $headstart = ''; + $headend = ''; + $this->hasTemplates = true; + + switch ( $this->m_embedformat ) { + case 'h1': case 'h2': case 'h3': case 'h4': case 'h5': case 'h6': + $headstart = '<' . $this->m_embedformat . '>'; + $headend = '</' . $this->m_embedformat . ">\n"; + break; + case 'ul': case 'ol': + $result .= '<' . $this->m_embedformat . '>'; + $footer = '</' . $this->m_embedformat . '>'; + $embstart = '<li>'; + $headend = "<br />\n"; + $embend = "</li>\n"; + break; + } + + // Print all result rows: + foreach ( $res->getResults() as $diWikiPage ) { + if ( $diWikiPage instanceof DIWikiPage ) { // ensure that we deal with title-likes + $dvWikiPage = DataValueFactory::getInstance()->newDataValueByItem( $diWikiPage, null ); + $result .= $embstart; + + if ( $this->m_showhead ) { + $result .= $headstart . $dvWikiPage->getLongWikiText( $this->mLinker ) . $headend; + } + + if ( $dvWikiPage->getLongWikiText() != $title ) { + if ( $diWikiPage->getNamespace() == NS_MAIN ) { + $result .= '{{:' . $diWikiPage->getDBkey() . '}}'; + } else { + $result .= '{{' . $dvWikiPage->getLongWikiText() . '}}'; + } + } else { // block recursion + $result .= '<b>' . $dvWikiPage->getLongWikiText() . '</b>'; + } + + $result .= $embend; + } + } + + // show link to more results + if ( $this->linkFurtherResults( $res ) ) { + $result .= $embstart + . $this->getFurtherResultsLink( $res, $outputMode )->getText( SMW_OUTPUT_WIKI, $this->mLinker ) + . $embend; + } + + $result .= $footer; + + return $result; + } + + /** + * @inheritdoc + */ + public function getParamDefinitions( array $definitions ) { + $definitions = parent::getParamDefinitions( $definitions ); + + $definitions[] = [ + 'name' => 'embedformat', + 'message' => 'smw-paramdesc-embedformat', + 'default' => 'h1', + 'values' => [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ol', 'ul' ], + ]; + + $definitions[] = [ + 'name' => 'embedonly', + 'type' => 'boolean', + 'message' => 'smw-paramdesc-embedonly', + 'default' => false, + ]; + + + return $definitions; + } +} |