xref: /plugin/struct/meta/AggregationValue.php (revision d90aa848684950ae06490f12279278db183f4fa5)
1812a20f7SIain Hallam<?php
2812a20f7SIain Hallam
3812a20f7SIain Hallamnamespace dokuwiki\plugin\struct\meta;
4812a20f7SIain Hallam
5812a20f7SIain Hallam/**
6812a20f7SIain Hallam * Class AggregationValue
7812a20f7SIain Hallam *
8812a20f7SIain Hallam * @package dokuwiki\plugin\struct\meta
9812a20f7SIain Hallam * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
10812a20f7SIain Hallam * @author  Iain Hallam <iain@nineworlds.net>
11812a20f7SIain Hallam */
12*d90aa848SAndreas Gohrclass AggregationValue extends Aggregation
13812a20f7SIain Hallam{
14812a20f7SIain Hallam
15812a20f7SIain Hallam    /**
16812a20f7SIain Hallam     * @var Column the column to be displayed
17812a20f7SIain Hallam     */
18812a20f7SIain Hallam    protected $column;
19812a20f7SIain Hallam
20*d90aa848SAndreas Gohr    /** @inheritdoc */
21812a20f7SIain Hallam    public function __construct($id, $mode, \Doku_Renderer $renderer, SearchConfig $searchConfig)
22812a20f7SIain Hallam    {
23812a20f7SIain Hallam        // limit to first result
24*d90aa848SAndreas Gohr        $searchConfig->setLimit(1);
25*d90aa848SAndreas Gohr        $searchConfig->setOffset(0);
26812a20f7SIain Hallam
27*d90aa848SAndreas Gohr        parent::__construct($id, $mode, $renderer, $searchConfig);
28812a20f7SIain Hallam    }
29812a20f7SIain Hallam
30812a20f7SIain Hallam    /**
31812a20f7SIain Hallam     * Create the output on the renderer
32812a20f7SIain Hallam     *
33812a20f7SIain Hallam     * @param int $show_not_found Whether to display the default text for no records
34812a20f7SIain Hallam     */
35812a20f7SIain Hallam    public function render($show_not_found = 0)
36812a20f7SIain Hallam    {
37812a20f7SIain Hallam        $this->startScope();
38812a20f7SIain Hallam
39812a20f7SIain Hallam        // Check that we actually got a result
40812a20f7SIain Hallam        if ($this->resultCount) {
41*d90aa848SAndreas Gohr            $this->renderValue($this->result[0]); // only one result
42812a20f7SIain Hallam        } else {
43812a20f7SIain Hallam            if ($show_not_found) {
44812a20f7SIain Hallam                $this->renderer->cdata($this->helper->getLang('none'));
45812a20f7SIain Hallam            }
46812a20f7SIain Hallam        }
47812a20f7SIain Hallam
48812a20f7SIain Hallam        $this->finishScope();
49812a20f7SIain Hallam    }
50812a20f7SIain Hallam
51812a20f7SIain Hallam    /**
52812a20f7SIain Hallam     * Adds additional info to document and renderer in XHTML mode
53812a20f7SIain Hallam     *
54812a20f7SIain Hallam     * @see finishScope()
55812a20f7SIain Hallam     */
56812a20f7SIain Hallam    protected function startScope()
57812a20f7SIain Hallam    {
58812a20f7SIain Hallam        // wrapping span
59812a20f7SIain Hallam        if ($this->mode != 'xhtml') {
60812a20f7SIain Hallam            return;
61812a20f7SIain Hallam        }
62812a20f7SIain Hallam        $this->renderer->doc .= "<span class=\"structaggregation valueaggregation\">";
63812a20f7SIain Hallam    }
64812a20f7SIain Hallam
65812a20f7SIain Hallam    /**
66812a20f7SIain Hallam     * Closes anything opened in startScope()
67812a20f7SIain Hallam     *
68812a20f7SIain Hallam     * @see startScope()
69812a20f7SIain Hallam     */
70812a20f7SIain Hallam    protected function finishScope()
71812a20f7SIain Hallam    {
72812a20f7SIain Hallam        // wrapping span
73812a20f7SIain Hallam        if ($this->mode != 'xhtml') {
74812a20f7SIain Hallam            return;
75812a20f7SIain Hallam        }
76812a20f7SIain Hallam        $this->renderer->doc .= '</span>';
77812a20f7SIain Hallam    }
78812a20f7SIain Hallam
79812a20f7SIain Hallam    /**
80*d90aa848SAndreas Gohr     * @param Value[] $resultrow
81812a20f7SIain Hallam     */
82812a20f7SIain Hallam    protected function renderValue($resultrow)
83812a20f7SIain Hallam    {
84812a20f7SIain Hallam        foreach ($resultrow as $column => $value) {
85812a20f7SIain Hallam            if ($value->isEmpty()) {
86812a20f7SIain Hallam                continue;
87812a20f7SIain Hallam            }
88812a20f7SIain Hallam            if ($this->mode == 'xhtml') {
89812a20f7SIain Hallam                $type = 'struct_' . strtolower($value->getColumn()->getType()->getClass());
90812a20f7SIain Hallam                $this->renderer->doc .= '<span class="' . $type . '">';
91812a20f7SIain Hallam            }
92812a20f7SIain Hallam            $value->render($this->renderer, $this->mode);
93812a20f7SIain Hallam            if ($this->mode == 'xhtml') {
94812a20f7SIain Hallam                $this->renderer->doc .= '</span>';
95812a20f7SIain Hallam            }
96812a20f7SIain Hallam        }
97812a20f7SIain Hallam    }
98812a20f7SIain Hallam}
99