tableId = str_replace('.', '_', $id);
}
/**
* Computes the dataTable output and returns the string/binary
*/
public function render(): string
{
$this->tableStructure = array();
$this->allColumns = array();
$this->i = 0;
return $this->renderTable($this->table);
}
/**
* Computes the output for the given data table
*
* @param DataTableInterface|array $table
*/
protected function renderTable($table): string
{
if (is_array($table)) {
// convert array to DataTable
$table = DataTable::makeFromSimpleArray($table);
}
if ($table instanceof DataTable\Map) {
foreach ($table->getDataTables() as $date => $subtable) {
if ($subtable->getRowsCount()) {
$this->buildTableStructure($subtable, '_' . $table->getKeyName(), $date);
}
}
} else {
// Simple
if ($table->getRowsCount()) {
$this->buildTableStructure($table);
}
}
return $this->renderDataTable();
}
/**
* Adds the given data table to the table structure array
*
* @param DataTable|DataTable\Map $table
* @param null|mixed $valueToAdd
* @throws Exception
*/
protected function buildTableStructure($table, ?string $columnToAdd = null, $valueToAdd = null): void
{
$i = $this->i;
$someMetadata = false;
$someIdSubTable = false;
/*
* table = array
* ROW1 = col1 | col2 | col3 | metadata | idSubTable
* ROW2 = col1 | col2 (no value but appears) | col3 | metadata | idSubTable
*/
if (!($table instanceof DataTable)) {
throw new Exception("HTML Renderer does not work with this combination of parameters");
}
foreach ($table->getRows() as $row) {
if (isset($columnToAdd) && isset($valueToAdd)) {
$this->allColumns[$columnToAdd] = true;
$this->tableStructure[$i][$columnToAdd] = $valueToAdd;
}
foreach ($row->getColumns() as $column => $value) {
$this->allColumns[$column] = true;
$this->tableStructure[$i][$column] = $value;
}
if (!$this->hideMetadata) {
$metadata = [];
foreach ($row->getMetadata() as $name => $value) {
if (is_string($value)) {
$value = "'$value'";
} elseif (is_array($value)) {
$value = var_export($value, true);
} elseif ($value instanceof DataTable\DataTableInterface) {
$value = $this->renderTable($value);
}
$metadata[] = "'$name' => $value";
}
if (count($metadata) != 0) {
$someMetadata = true;
$metadata = implode("
", $metadata);
$this->tableStructure[$i]['_metadata'] = $metadata;
}
if (!$this->hideIdSubDatatable) {
$idSubtable = $row->getIdSubDataTable();
if (!is_null($idSubtable)) {
$someIdSubTable = true;
$this->tableStructure[$i]['_idSubtable'] = $idSubtable;
}
}
}
$i++;
}
$this->i = $i;
if (!$this->hideMetadata) {
$this->allColumns['_metadata'] = $someMetadata;
if (!$this->hideIdSubDatatable) {
$this->allColumns['_idSubtable'] = $someIdSubTable;
}
}
}
/**
* Computes the output for the table structure array
*/
protected function renderDataTable(): string
{
$html = "
| " . self::formatValueXml($name) . " | \n"; } } $html .= "\t
|---|
| $value | \n"; } } $html .= "\t