public function &getDataGrid(IDataSourceExpression &$expression) { $rv = null; if (!$expression instanceof DbmsExpression) { throw new Exception('DbmsExpression missing'); } $db =& DbmsDataSource::getInstance($this->getDriver()); if ($rs =& $db->execute($expression->toString())) { $dgr_id = $dg_row = null; while ($row =& $rs->next()) { if (is_null($rv)) { $rv =& new DataGrid($this, $row['datagrid_id']); $rv->setTitle($row['datagrid_title']); } if ($dgr_id != $row['datagridrow_id']) { if (!is_null($dg_row)) { $rv->add($dg_row); } $dg_row =& new DataGridRow($row['datagridrow_id']); } $dg_row->add(new DataGridColumn($row['datagridcolumn_id'], $row['datagridcolumn_value'])); $dgr_id = $row['datagridrow_id']; } $rs->dispose(); } if (!is_null($dg_row)) { $rv->add($dg_row); } $db->close(); return $rv; }
public function &getDataGrid(IDataSourceExpression &$expression) { $driver =& $this->getDriver(); $xml = simplexml_load_file($driver->getFilepath()); if (!$xml) { throw new Exception('Unable to load `' . $driver->getFilepath() . '`'); } if (!$expression instanceof XpathExpression) { throw new Exception('Missing XPath expression'); } $xpathResult = $xml->xpath($expression->toString()); if (count($xpathResult) != 1) { throw new Exception('XPath expression returns more than one root element'); } $rv =& new DataGrid($this, (string) $xpathResult[0]['id']); $rv->setTitle((string) $xpathResult[0]['title']); foreach ($xpathResult[0]->datagridrow as $idx => $dgRow) { $oDGR =& new DataGridRow((string) $dgRow['id']); foreach ($dgRow->datagridcolumn as $idx => $dgColumn) { $oDGR->add(new DataGridColumn((string) $dgColumn['id'], (string) $dgColumn)); } $rv->add($oDGR); } return $rv; }