4 $GLOBALS[
'HTML_QUICKFORM_ELEMENT_TYPES'][
'grid'] = array(
'HTML/QuickForm/grid.php',
'HTML_QuickForm_grid');
21 $widget =&
$field[
'widget'];
22 $el =& $factory->addElement(
'grid',$formFieldName, $widget[
'label']);
23 $el->setProperties($widget);
24 if ( !$record->checkPermission(
'delete related record', array(
'relationship'=>
$field[
'relationship']))){
27 if ( !$record->checkPermission(
'add new related record', array(
'relationship'=>
$field[
'relationship']))){
31 if ( isset(
$field[
'relationship']) ){
32 $relationship =&
$table->getRelationship(
$field[
'relationship']);
34 if ( !$relationship->supportsAddNew() ){
38 if ( !$relationship->supportsAddExisting() ){
39 $el->addExisting=
false;
41 $el->addExistingFilters = $relationship->getAddExistingFilters();
44 $el->table = $relationship->getDomainTable();
45 if ( isset( $widget[
'columns'] ) ){
46 $columns = array_map(
'trim',explode(
',',$widget[
'columns']));
48 $columns = $relationship->_schema[
'short_columns'];
51 $subfactory =
new HTML_QuickForm();
56 $colTable =& $relationship->getTable($column);
57 if ( !$colTable ) echo
"Could not find table for column $column";
59 $colPerms = $dummyRelatedRecord->
getPermissions(array(
'field'=>$column));
61 if ( !@$colPerms[
'view'] ){
69 $dummyRecord =
new Dataface_Record($colTable->tablename, $record->vals());
78 $colFieldDef =& $colTable->getField($column);
80 $columnElement =& $formTool->buildWidget($dummyRecord, $colFieldDef, $subfactory, $column,
false);
81 $defaultValue = $colTable->getDefaultValue($column);
82 $columnElement->
setValue($defaultValue);
83 $el->defaults[$column] = $defaultValue;
84 $el->addField($colFieldDef, $columnElement, $colPerms );
86 $orderCol = $relationship->getOrderColumn();
89 unset($columnElement);
93 unset($elementFilter);
98 else if ( isset($widget[
'fields']) ){
99 $widget_fields =& $widget[
'fields'];
100 foreach ($widget_fields as $widget_field){
104 return $widget_field;
107 $widget_widget = $formTool->buildWidget($record, $widget_field, $factory, $widget_field[
'name']);
108 $defaultValue =
$table->getDefaultValue($widget_field[
'name']);
110 $widget_widget->setValue($defaultValue);
111 $el->addField($widget_widget);
112 $el->defaults[$widget_field[
'name']] = $defaultValue;
114 }
else if ( isset(
$field[
'fields']) ){
115 foreach ( array_keys(
$field[
'fields']) as $field_key){
116 $widget_widget = $formTool->buildWidget($record,
$field[
'fields'][$field_key], $factory,
$field[
'fields'][$field_key][
'name']);
117 $defaultValue =
$table->getDefaultValue($widget_field[
'name']);
119 $widget_widget->setValue($defaultValue);
120 $el->defaults[$widget_field[
'name']] = $defaultValue;
121 $el->addField($widget_widget);
122 unset($widget_widget);
131 $val = $record->getValue(
$field[
'name']);
134 $subfactory =
new HTML_QuickForm();
135 foreach ($element->getColumnIds() as $colname){
137 $colFieldDef = $element->getColumnFieldDef($colname);
138 $columnElement =
df_clone($element->getColumnElement($colname));
144 $dummyRecord =
new Dataface_Record($colFieldDef[
'tablename'], array());
151 $filters[$colname] = $filter;
155 unset($columnElement);
160 if ( !is_array($val) ){
164 foreach ($val as $key=>$row){
166 if ( is_array($row) ){
167 foreach ($row as $colname=>$colval){
168 if ( isset($filters[$colname]) ){
169 $val[$key][$colname] = $filters[$colname]->pullValue($colval);
179 $val = $element->getValue();
185 $subfactory =
new HTML_QuickForm();
186 foreach ($element->getColumnIds() as $colname){
188 $colFieldDef = $element->getColumnFieldDef($colname);
189 $columnElement =
df_clone($element->getColumnElement($colname));
195 $dummyRecord =
new Dataface_Record($colFieldDef[
'tablename'], array());
202 $filters[$colname] = $filter;
206 unset($columnElement);
212 foreach ( $val as $key=>$row ){
213 if (is_array($row) and isset($row[
'__id__']) and ($row[
'__id__'] ==
'new') ){
217 if ( is_array($row) ){
218 foreach ($row as $colname=>$colval){
219 if ( isset($filters[$colname]) ){
220 $val[$key][$colname] = $filters[$colname]->pushValue($colval);
227 if ( $last_id != -1 ) unset($val[$last_id]);
247 $this->{
'new'} =
$new;
248 $this->form =&
$form;
253 $delegate = $this->record->_table->getDelegate();
254 $this->record->setValue($this->field[
'name'], $val);
257 if ( $delegate !== null and method_exists($delegate, $this->field[
'name'].
"__pullValue") ){
264 $method = $this->field[
'name'].
'__pullValue';
265 $val = $delegate->$method($this->record, $this->element);
266 $filterValue =
false;
268 }
else if ( isset($widgetHandler) and method_exists($widgetHandler,
'pullValue') ){
269 $val = $widgetHandler->pullValue($this->record, $this->field, $this->form, $this->element, $this->
new);
277 $evt->{
'new'} = $this->{
'new'};
288 $this->element->setValue($val);
289 $delegate = $this->record->_table->getDelegate();
292 if ( $delegate !== null and method_exists($delegate, $this->field[
'name'].
"__pushValue") ){
298 $method = $this->field[
'name'].
'__pushValue';
299 $val = $delegate->$method($this->record, $this->element);
300 $filterValue =
false;
302 }
else if ( isset($widgetHandler) and method_exists($widgetHandler,
'pushValue') ){
303 $val = $widgetHandler->pushValue($this->record, $this->field, $this->form, $this->element, $this->
new);
309 $evt->record = $this->record;
311 $evt->form = $this->form;
312 $evt->{
'new'} = $this->{
'new'};
313 $evt->element = $this->element;
314 $evt->metaValues = array();