*/ class AggregationValue { /** * @var string the page id of the page this is rendered to */ protected $id; /** * @var string the Type of renderer used */ protected $mode; /** * @var Doku_Renderer the DokuWiki renderer used to create the output */ protected $renderer; /** * @var SearchConfig the configured search - gives access to columns etc. */ protected $searchConfig; /** * @var Column the column to be displayed */ protected $column; /** * @var Value[][] the search result */ protected $result; /** * @var int number of all results */ protected $resultCount; /** * @todo we might be able to get rid of this helper and move this to SearchConfig * @var helper_plugin_struct_config */ protected $helper; /** * Initialize the Aggregation renderer and executes the search * * You need to call @param string $id * @param string $mode * @param Doku_Renderer $renderer * @param SearchConfig $searchConfig * @see render() on the resulting object. * */ public function __construct($id, $mode, \Doku_Renderer $renderer, SearchConfig $searchConfig) { // Parameters $this->id = $id; $this->mode = $mode; $this->renderer = $renderer; $this->searchConfig = $searchConfig; // Search info $this->data = $this->searchConfig->getConf(); $columns = $this->searchConfig->getColumns(); $this->column = $columns[0]; // limit to first result $this->searchConfig->setLimit(1); $this->searchConfig->setOffset(0); // Run the search $result = $this->searchConfig->execute(); $this->resultCount = $this->searchConfig->getCount(); // Change from two-dimensional array with one entry to one-dimensional array $this->result = $result[0]; // Load helper $this->helper = plugin_load('helper', 'struct_config'); } /** * Create the output on the renderer * * @param int $show_not_found Whether to display the default text for no records */ public function render($show_not_found = 0) { $this->startScope(); // Check that we actually got a result if ($this->resultCount) { $this->renderValue($this->result); } else { if ($show_not_found) { $this->renderer->cdata($this->helper->getLang('none')); } } $this->finishScope(); return; } /** * Adds additional info to document and renderer in XHTML mode * * @see finishScope() */ protected function startScope() { // wrapping span if ($this->mode != 'xhtml') { return; } $this->renderer->doc .= ""; } /** * Closes anything opened in startScope() * * @see startScope() */ protected function finishScope() { // wrapping span if ($this->mode != 'xhtml') { return; } $this->renderer->doc .= ''; } /** * @param $resultrow */ protected function renderValue($resultrow) { // @var Value $value foreach ($resultrow as $column => $value) { if ($value->isEmpty()) { continue; } if ($this->mode == 'xhtml') { $type = 'struct_' . strtolower($value->getColumn()->getType()->getClass()); $this->renderer->doc .= ''; } $value->render($this->renderer, $this->mode); if ($this->mode == 'xhtml') { $this->renderer->doc .= ''; } } } }