62 require_once
'Dataface/Record.php';
63 define(
'RecordGrid_ActionLabel',
'____actions____');
76 if ( !is_array($this->records) ){
77 throw new Exception(
'In Dataface_RecordGrid the first parameter is expected to be an array but received "'.get_class(
$records).
'"', E_USER_ERROR);
85 $this->actionCellCallbacks[] = $callback;
89 import(
'Dataface/SkinTool.php');
90 $recKeys = array_keys($this->records);
91 $sampleRecord =& $this->records[$recKeys[0]];
92 if ( $this->columns === null ){
94 if ( is_a($sampleRecord,
'Dataface_Record') ){
95 $columns = array_keys($sampleRecord->_table->fields(
false,
true));
96 }
else if ( is_a($sampleRecord,
'Dataface_RelatedRecord') ){
97 $columns = $sampleRecord->_relationship->_schema[
'short_columns'];
99 $columns = array_keys($sampleRecord);
104 if ( count($this->actionCellCallbacks) > 0 ){
105 $hasCallbacks =
true;
108 $hasCallbacks =
false;
112 $gridContent = array();
113 foreach ($this->records as $record){
115 if ( is_a($record,
'Dataface_Record') or is_a($record,
'Dataface_RelatedRecord') ){
119 $row[$column] = $record->printValue($column);
120 if ( isset($this->cellFilters[$column]) ){
121 $row[$column] = call_user_func($this->cellFilters[$column], $record, $column, $row[$column]);
125 if ( $hasCallbacks ){
127 foreach ( $this->actionCellCallbacks as $cb ){
128 $cbout[] = call_user_func($cb, $row);
132 $gridContent[] =& $row;
134 }
else if ( is_array($record) ){
138 $row[$column] = @$record[$column];
139 if ( isset($this->cellFilters[$column]) ){
140 $row[$column] = call_user_func($this->cellFilters[$column], $row, $column, $row[$column]);
143 if ( $hasCallbacks ){
145 foreach ( $this->actionCellCallbacks as $cb ){
146 $cbout[] = call_user_func($cb, $row);
151 $gridContent[] =& $row;
157 if ( $this->labels === null ){
158 $this->labels = array();
164 if ( is_a( $sampleRecord,
'Dataface_Record') ){
165 $field =& $sampleRecord->_table->getField($column);
167 }
else if ( is_a($sampleRecord,
'Dataface_RelatedRecord') ){
168 $table =& $sampleRecord->_relationship->getTable($column);
172 $labels[$column] = ucwords(str_replace(
'_',
' ',$column));
185 $context = array(
'data'=> &$gridContent,
'labels'=>&
$labels,
'columns'=>&
$columns,
'id'=>$this->
id,
'class'=>$this->cssclass);
188 $skinTool->display($context,
'Dataface_RecordGrid.html');
189 $out = ob_get_contents();