1*812a20f7SIain Hallam<?php 2*812a20f7SIain Hallam 3*812a20f7SIain Hallamnamespace dokuwiki\plugin\struct\meta; 4*812a20f7SIain Hallam 5*812a20f7SIain Hallam/** 6*812a20f7SIain Hallam * Class AggregationValue 7*812a20f7SIain Hallam * 8*812a20f7SIain Hallam * @package dokuwiki\plugin\struct\meta 9*812a20f7SIain Hallam * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 10*812a20f7SIain Hallam * @author Iain Hallam <iain@nineworlds.net> 11*812a20f7SIain Hallam */ 12*812a20f7SIain Hallamclass AggregationValue 13*812a20f7SIain Hallam{ 14*812a20f7SIain Hallam 15*812a20f7SIain Hallam /** 16*812a20f7SIain Hallam * @var string the page id of the page this is rendered to 17*812a20f7SIain Hallam */ 18*812a20f7SIain Hallam protected $id; 19*812a20f7SIain Hallam /** 20*812a20f7SIain Hallam * @var string the Type of renderer used 21*812a20f7SIain Hallam */ 22*812a20f7SIain Hallam protected $mode; 23*812a20f7SIain Hallam /** 24*812a20f7SIain Hallam * @var Doku_Renderer the DokuWiki renderer used to create the output 25*812a20f7SIain Hallam */ 26*812a20f7SIain Hallam protected $renderer; 27*812a20f7SIain Hallam /** 28*812a20f7SIain Hallam * @var SearchConfig the configured search - gives access to columns etc. 29*812a20f7SIain Hallam */ 30*812a20f7SIain Hallam protected $searchConfig; 31*812a20f7SIain Hallam 32*812a20f7SIain Hallam /** 33*812a20f7SIain Hallam * @var Column the column to be displayed 34*812a20f7SIain Hallam */ 35*812a20f7SIain Hallam protected $column; 36*812a20f7SIain Hallam 37*812a20f7SIain Hallam /** 38*812a20f7SIain Hallam * @var Value[][] the search result 39*812a20f7SIain Hallam */ 40*812a20f7SIain Hallam protected $result; 41*812a20f7SIain Hallam 42*812a20f7SIain Hallam /** 43*812a20f7SIain Hallam * @var int number of all results 44*812a20f7SIain Hallam */ 45*812a20f7SIain Hallam protected $resultCount; 46*812a20f7SIain Hallam 47*812a20f7SIain Hallam /** 48*812a20f7SIain Hallam * @todo we might be able to get rid of this helper and move this to SearchConfig 49*812a20f7SIain Hallam * @var helper_plugin_struct_config 50*812a20f7SIain Hallam */ 51*812a20f7SIain Hallam protected $helper; 52*812a20f7SIain Hallam 53*812a20f7SIain Hallam /** 54*812a20f7SIain Hallam * Initialize the Aggregation renderer and executes the search 55*812a20f7SIain Hallam * 56*812a20f7SIain Hallam * You need to call @see render() on the resulting object. 57*812a20f7SIain Hallam * 58*812a20f7SIain Hallam * @param string $id 59*812a20f7SIain Hallam * @param string $mode 60*812a20f7SIain Hallam * @param Doku_Renderer $renderer 61*812a20f7SIain Hallam * @param SearchConfig $searchConfig 62*812a20f7SIain Hallam */ 63*812a20f7SIain Hallam public function __construct($id, $mode, \Doku_Renderer $renderer, SearchConfig $searchConfig) 64*812a20f7SIain Hallam { 65*812a20f7SIain Hallam // Parameters 66*812a20f7SIain Hallam $this->id = $id; 67*812a20f7SIain Hallam $this->mode = $mode; 68*812a20f7SIain Hallam $this->renderer = $renderer; 69*812a20f7SIain Hallam $this->searchConfig = $searchConfig; 70*812a20f7SIain Hallam 71*812a20f7SIain Hallam // Search info 72*812a20f7SIain Hallam $this->data = $this->searchConfig->getConf(); 73*812a20f7SIain Hallam $columns = $this->searchConfig->getColumns(); 74*812a20f7SIain Hallam $this->column = $columns[0]; 75*812a20f7SIain Hallam 76*812a20f7SIain Hallam // limit to first result 77*812a20f7SIain Hallam $this->searchConfig->setLimit(1); 78*812a20f7SIain Hallam $this->searchConfig->setOffset(0); 79*812a20f7SIain Hallam 80*812a20f7SIain Hallam // Run the search 81*812a20f7SIain Hallam $result = $this->searchConfig->execute(); 82*812a20f7SIain Hallam $this->resultCount = $this->searchConfig->getCount(); 83*812a20f7SIain Hallam 84*812a20f7SIain Hallam // Change from two-dimensional array with one entry to one-dimensional array 85*812a20f7SIain Hallam $this->result = $result[0]; 86*812a20f7SIain Hallam 87*812a20f7SIain Hallam // Load helper 88*812a20f7SIain Hallam $this->helper = plugin_load('helper', 'struct_config'); 89*812a20f7SIain Hallam } 90*812a20f7SIain Hallam 91*812a20f7SIain Hallam /** 92*812a20f7SIain Hallam * Create the output on the renderer 93*812a20f7SIain Hallam * 94*812a20f7SIain Hallam * @param int $show_not_found Whether to display the default text for no records 95*812a20f7SIain Hallam */ 96*812a20f7SIain Hallam public function render($show_not_found = 0) 97*812a20f7SIain Hallam { 98*812a20f7SIain Hallam $this->startScope(); 99*812a20f7SIain Hallam 100*812a20f7SIain Hallam // Check that we actually got a result 101*812a20f7SIain Hallam if ($this->resultCount) { 102*812a20f7SIain Hallam $this->renderValue($this->result); 103*812a20f7SIain Hallam } else { 104*812a20f7SIain Hallam if ($show_not_found) { 105*812a20f7SIain Hallam $this->renderer->cdata($this->helper->getLang('none')); 106*812a20f7SIain Hallam } 107*812a20f7SIain Hallam } 108*812a20f7SIain Hallam 109*812a20f7SIain Hallam $this->finishScope(); 110*812a20f7SIain Hallam 111*812a20f7SIain Hallam return; 112*812a20f7SIain Hallam } 113*812a20f7SIain Hallam 114*812a20f7SIain Hallam /** 115*812a20f7SIain Hallam * Adds additional info to document and renderer in XHTML mode 116*812a20f7SIain Hallam * 117*812a20f7SIain Hallam * @see finishScope() 118*812a20f7SIain Hallam */ 119*812a20f7SIain Hallam protected function startScope() 120*812a20f7SIain Hallam { 121*812a20f7SIain Hallam // wrapping span 122*812a20f7SIain Hallam if ($this->mode != 'xhtml') { 123*812a20f7SIain Hallam return; 124*812a20f7SIain Hallam } 125*812a20f7SIain Hallam $this->renderer->doc .= "<span class=\"structaggregation valueaggregation\">"; 126*812a20f7SIain Hallam } 127*812a20f7SIain Hallam 128*812a20f7SIain Hallam /** 129*812a20f7SIain Hallam * Closes anything opened in startScope() 130*812a20f7SIain Hallam * 131*812a20f7SIain Hallam * @see startScope() 132*812a20f7SIain Hallam */ 133*812a20f7SIain Hallam protected function finishScope() 134*812a20f7SIain Hallam { 135*812a20f7SIain Hallam // wrapping span 136*812a20f7SIain Hallam if ($this->mode != 'xhtml') { 137*812a20f7SIain Hallam return; 138*812a20f7SIain Hallam } 139*812a20f7SIain Hallam $this->renderer->doc .= '</span>'; 140*812a20f7SIain Hallam } 141*812a20f7SIain Hallam 142*812a20f7SIain Hallam /** 143*812a20f7SIain Hallam * @param $resultrow 144*812a20f7SIain Hallam */ 145*812a20f7SIain Hallam protected function renderValue($resultrow) 146*812a20f7SIain Hallam { 147*812a20f7SIain Hallam // @var Value $value 148*812a20f7SIain Hallam foreach ($resultrow as $column => $value) { 149*812a20f7SIain Hallam if ($value->isEmpty()) { 150*812a20f7SIain Hallam continue; 151*812a20f7SIain Hallam } 152*812a20f7SIain Hallam if ($this->mode == 'xhtml') { 153*812a20f7SIain Hallam $type = 'struct_' . strtolower($value->getColumn()->getType()->getClass()); 154*812a20f7SIain Hallam $this->renderer->doc .= '<span class="' . $type . '">'; 155*812a20f7SIain Hallam } 156*812a20f7SIain Hallam $value->render($this->renderer, $this->mode); 157*812a20f7SIain Hallam if ($this->mode == 'xhtml') { 158*812a20f7SIain Hallam $this->renderer->doc .= '</span>'; 159*812a20f7SIain Hallam } 160*812a20f7SIain Hallam } 161*812a20f7SIain Hallam } 162*812a20f7SIain Hallam} 163