[%# =head1 display_inputs This *RECURSIVELY* displays inputs for a hash of html elements Vars it needs: classmetadata-- the hash of bunch of data: cgi -- inputs keyed on column names table -- table inputs are for columns -- list in order want displayed inputs colnames -- hash of what to label inputs errors -- hash of errors keyed on columns TODO -- make it recognize a general submit button for redisplaying values on errors =cut # %] [% # some variables foreign = []; names = []; # get hash of related classes keyed on accessor for Foreign Inputs USE this = Class(classmetadata.name); tbl = classmetadata.table; required = { }; FOR c IN request.config.$tbl.required_cols; required.$c = 1; END; %] [% FOR col = classmetadata.columns; NEXT IF !classmetadata.cgi.$col; NEXT IF col == "id" OR col == classmetadata.table _ "_id"; # Display foreign inputs last IF (mykeys = classmetadata.cgi.$col.keys); foreign.push(col); names.push(classmetadata.colnames.$col); NEXT; END; %] [% # Base case starts here SET elem = classmetadata.cgi.$col; #.clone; # not sure why clone IF elem.type == 'hidden'; elem.as_XML; NEXT; ELSIF cgi_params; param_col = col_prefix _ col; IF elem.tag == "textarea"; elem = elem.push_content(cgi_params.$param_col); ELSIF elem.tag == "select"; oldval = set_selected(elem, cgi_params.$col); ELSE; oldval = elem.attr("value", cgi_params.$param_col); END; END; %] [% IF errors.$col %] [% errors.$col | html %] [% END %] [% END; %] [% USE this = Class(classmetadata.name); FOR col IN foreign; fclass = this.related_class(request, col); fclass_meta = this.get_classmetadata(fclass); fclass_meta.cgi = classmetadata.cgi.$col; INCLUDE display_inputs col_prefix = col _ "__AF__" _ col_prefix errors = errors.$col heading = names.shift classmetadata = fclass_meta; # localize END; %]