. */ /** * Class TotalField a Transform used to add a total row to the end of the data set * with totals for specified fields. */ class TotalField implements CFDBTransform { /** * @var array */ var $rows = array(); /** * @var array */ var $fields = array(); /** * @var array */ var $totals; /** * @var bool */ var $finished = false; function __construct() { $this->fields = func_get_args(); foreach ($this->fields as $field) { $this->totals[$field] = 0.0; } } /** * @param $entry array associative array of a single for entry * @return void */ public function addEntry(&$entry) { $this->rows[] = $entry; foreach ($this->fields as $field) { if (isset($entry[$field])) { $this->totals[$field] += floatval($entry[$field]); } } } /** * Call this when done adding entries. Apply transform across all entered data, * then return the entire set. The returned set may be entirely different data than * what was input (e.g. statistics) * @return array of associative of array of data. */ public function getTransformedData() { if (!$this->finished) { $this->rows[] = $this->totals; $this->finished = true; } return $this->rows; } }