1*5153720fSfkaag71<?php 2*5153720fSfkaag71/** 3*5153720fSfkaag71 * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 4*5153720fSfkaag71 * @author Brend Wanders <b.wanders@utwente.nl> 5*5153720fSfkaag71 */ 6*5153720fSfkaag71// must be run within Dokuwiki 7*5153720fSfkaag71if(!defined('DOKU_INC')) die('Meh.'); 8*5153720fSfkaag71 9*5153720fSfkaag71/** 10*5153720fSfkaag71 * The summation aggregator. 11*5153720fSfkaag71 */ 12*5153720fSfkaag71class plugin_strata_aggregate_sum extends plugin_strata_aggregate { 13*5153720fSfkaag71 function aggregate($values, $hint = null) { 14*5153720fSfkaag71 if($hint == 'strict') { 15*5153720fSfkaag71 return array_reduce($values, function(&$state, $item) { 16*5153720fSfkaag71 if(is_numeric($item)) { 17*5153720fSfkaag71 $state[0] += $item; 18*5153720fSfkaag71 } else { 19*5153720fSfkaag71 $state[] = $item; 20*5153720fSfkaag71 } 21*5153720fSfkaag71 return $state; 22*5153720fSfkaag71 }, array(0)); 23*5153720fSfkaag71 } else { 24*5153720fSfkaag71 return array(array_sum($values)); 25*5153720fSfkaag71 } 26*5153720fSfkaag71 } 27*5153720fSfkaag71 28*5153720fSfkaag71 function getInfo() { 29*5153720fSfkaag71 return array( 30*5153720fSfkaag71 'desc'=>'Sums up all items. Any item that does not have a clear numeric value (i.e. starts with a number) is counted as 0. If the \'strict\' hint is used, values that are not strictly numeric (i.e. contains only a number) are left intact.', 31*5153720fSfkaag71 'hint'=>'\'strict\' to leave non-numeric values', 32*5153720fSfkaag71 'tags'=>array('numeric') 33*5153720fSfkaag71 ); 34*5153720fSfkaag71 } 35*5153720fSfkaag71} 36