public function run(Am_Grid_Editable $grid, Am_Grid_DataSource_Interface_ReadOnly $dataSource, $fields, $config) { header('Cache-Control: maxage=3600'); header('Pragma: public'); header("Content-type: text/csv"); $dat = date('YmdHis'); header("Content-Disposition: attachment; filename=amember" . $grid->getId() . "-{$dat}.csv"); $total = $dataSource->getFoundRows(); $numOfPages = ceil($total / self::EXPORT_REC_LIMIT); $delim = $config['delim']; //render headers foreach ($fields as $field) { echo amEscapeCsv($field->getFieldTitle(), $delim) . $delim; } echo "\r\n"; //render content for ($i = 0; $i < $numOfPages; $i++) { $ret = $dataSource->selectPageRecords($i, self::EXPORT_REC_LIMIT); foreach ($ret as $r) { foreach ($fields as $field) { echo amEscapeCsv($field->get($r, $grid), $delim) . $delim; } echo "\r\n"; } } return; }
public function render() { $out = "#" . self::DELIM; //render headers foreach ($this->result->getLines() as $line) { $out .= amEscapeCsv($line->getLabel(), self::DELIM) . self::DELIM; } $out .= "\r\n"; $totals = array(); foreach ($this->result->getPoints() as $point) { if (!$point->hasValues()) { continue; } $out .= amEscapeCsv($point->getLabel(), self::DELIM) . self::DELIM; $i = 0; foreach ($this->result->getLines() as $line) { $out .= amEscapeCsv($line->formatValue($point->getValue($line->getKey())), self::DELIM) . self::DELIM; @($lines[$i] = $line); @($totals[$i++] += $point->getValue($line->getKey())); } $out .= "\r\n"; } foreach ($totals as $k => $tt) { // if we have at least one numeric value in totals, display total row if ($tt > 0) { $out .= ___("Total") . self::DELIM; foreach ($totals as $v) { $out .= amEscapeCsv($lines[$k]->formatValue($v), self::DELIM) . self::DELIM; } $out .= "\r\n"; break; } } return $out; }