params = $params;
}
/**
* @since 3.1
*
* @param Linker|null|false $linker
*/
public function setLinker( $linker ) {
$this->linker = $linker;
}
/**
* @since 3.1
*
* @param OutlineTree $tree
*
* @return string
*/
public function build( OutlineTree $outlineTree ) {
$this->tree( $outlineTree );
return $this->template;
}
private function tree( $outlineTree, $level = 0 ) {
if ( $outlineTree->items !== null ) {
foreach ( $outlineTree->items as $i => $item ) {
$this->template .= $this->item( $i, $item );
}
}
foreach ( $outlineTree->tree as $key => $node ) {
$property = $this->params['outlineproperties'][$level];
$class = $this->params['template'] . '-section-' . strtolower( str_replace( ' ', '-', $property ) );
$this->template .= "
";
$this->template .= $this->open( $this->params['template'] . "-header" );
$this->template .= $this->parameter( $property, $key );
$this->template .= $this->parameter( "#outlinelevel", $level );
$this->template .= $this->parameter( "#itemcount", $node->leafCount );
$this->template .= $this->parameter( "#userparam", $this->params['userparam'] );
$this->template .= $this->close();
$this->template .= "
";
$this->tree( $node, $level + 1 );
$this->template .= "
";
$this->template .= "
";
}
}
private function item( $i, $item ) {
$first_col = true;
$template = '';
$linker = $this->params['link'] === 'all' ? $this->linker : null;
$itemnumber = 0;
foreach ( $item->row as $resultArray ) {
$printRequest = $resultArray->getPrintRequest();
$val = $printRequest->getText( SMW_OUTPUT_WIKI, null );
if ( in_array( $val, $this->params['outlineproperties'] ) ) {
continue;
}
while ( ( $dv = $resultArray->getNextDataValue() ) !== false ) {
$template .= $this->open( $this->params['template'] . '-item' );
$template .= $this->parameter( "#itemsection", $i );
$template .= $this->parameter( "#itemnumber", $itemnumber );
$template .= $this->parameter( "#userparam", $this->params['userparam'] );
$template .= $this->itemText( $dv, $linker, $printRequest, $first_col );
$template .= $this->close();
$itemnumber++;
}
}
return "" . $template . '
';
}
private function itemText( $dv, $linker, $printRequest, &$first_col ) {
if ( $first_col && $printRequest->isMode( PrintRequest::PRINT_THIS ) ) {
$first_col = false;
if ( $linker === null && ( $caption = $dv->getDisplayTitle() ) !== '' ) {
$dv->setCaption( $caption );
}
$text = $dv->getShortText(
SMW_OUTPUT_WIKI,
$this->params['link'] === 'subject' ? $this->linker : $linker
);
return $this->parameter( "#itemsubject", $text );
}
$text = $dv->getShortText(
SMW_OUTPUT_WIKI,
$linker
);
return $this->parameter( $printRequest->getLabel(), $text );
}
private function open( $v ) {
return "{{" . $v;
}
private function parameter( $k, $v ) {
return " |$k=$v";
}
private function close() {
return "}}";
}
}