[%# =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; %] [% SET heading_shown = 0; 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; IF ! heading_shown; heading = classmetadata.moniker | ucfirst; "

$heading

"; SET heading_shown = 1; 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; # has_many mapping throws a stick in our spokes because related_class returns the mapped # class. Sometimes we just want the has_many class. # In case of Pub Handpumps maps to Beer and we want to add Handpump to Pub, we dont # want the mapped data . # In case of "Create New Handpump" -- we want the mapped data probably so we get # Beer inputs and Pub select box. fclass_rel_meta = this.related_meta(request, col); fclass = fclass_rel_meta.foreign_class; # ignor args.mapping fclass_meta = this.get_classmetadata(fclass); fclass_meta.cgi = classmetadata.cgi.$col; # USE Dumper; Dumper.dump(fclass_meta); INCLUDE display_inputs col_prefix = col _ "__AF__" _ col_prefix errors = errors.$col heading = names.shift classmetadata = fclass_meta; # localize END; %]