[% PROCESS inputs; PROCESS class_manip; PROCESS widget_manip; PROCESS logic_header.ttk; templates = DBI.tie('reporter.stage2', 'id') tmpl = {}; IF CGI.param('id'); tid = CGI.param('id'); tmpl = templates.$tid; END; WRAPPER html/html; INCLUDE header.ttk title="Report Templates"; WRAPPER html/body; INCLUDE logout.ttk; IF CGI.param('action') == 'save'; PROCESS save_stage2; ELSIF CGI.param('action') == 'edit'; PROCESS edit_stage2; ELSIF CGI.param('action') == 'run'; PROCESS run_stage2; ELSE; PROCESS view_stage2; END; END; INCLUDE footer.ttk; END; BLOCK save_stage2; stage1 = CGI.param('stage1'); pub = CGI.param('publictemplate') OR 'f'; owner = user.id(); p_obj = {}; FOR p IN CGI.param(); logme([p,CGI.param(p)]); parts = p.split(':'); p1 = parts.0; p2 = parts.1; p3 = parts.2; p4 = parts.3; IF p4 AND (CGI.param("$p1:$p2:$p3") == p4) AND (CGI.param("$p1:$p2").list.grep(p3).size > 0) AND (CGI.param("$p1").list.grep(p2).size > 0); p_obj.$p1.$p2.$p3.$p4 = CGI.param(p); ELSIF p2 AND (CGI.param("$p1").list.grep(p2).size > 0); p_obj.dims.$p2 = 1; ELSIF p1 != 'filter'; p_obj.$p1 = CGI.param(p); END; END; params = utils.perl2JSON( p_obj ); logme([stage1, params, owner, pub]); q = DBI.prepare( stage2_insert ); CALL q.execute(stage1, params, owner, pub); FOR new_s2 = DBI.query("SELECT * FROM reporter.stage2_id_seq;"); tid = new_s2.last_value; INCLUDE view_stage2 tmpl = templates.$tid; END; END; BLOCK edit_stage2; END; BLOCK view_stage2; logme(tmpl.params); params = utils.JSON2perl( tmpl.params ); WRAPPER html/table border=0 width='100%'; WRAPPER html/row; WRAPPER html/cell colspan=5 align='center'; s1_name_xpath = '/reporter/tables/table[@id="' _ params.stage1 _ '"]/label'; INCLUDE anchor text=config.findvalue( s1_name_xpath ) href="stage1?id=" _ params.stage1; ' :: ' _ params.templatename _ '
'; INCLUDE anchor text="Create a report from this template" href=CGI.url('-path', 1) _ '?action=run&id=' _ tmpl.id; END; END; WRAPPER html/row; INCLUDE html/cell colspan=4 content="Filterable Attributes:"; END; FOR f_table IN params.filter.keys; logme([f_table]); table = config.findnodes( "/reporter/tables/table[@id='$f_table']"); WRAPPER html/row; INCLUDE html/cell; INCLUDE html/cell colspan=4 align='left' content=table.findvalue( 'label' ); END; FOR f_field IN params.filter.$f_table.keys; logme([f_table,f_field]); FOR f_fam IN params.filter.$f_table.$f_field.keys; logme([f_table,f_field,f_fam]); f_widget = params.filter.$f_table.$f_field.$f_fam; logme([f_table,f_field,f_fam,f_widget]); WRAPPER html/row; field = table.findnodes( "fields/field[@name='$f_field']" ); fam = config.findnodes( "/reporter/widgets/widget-family[@name='$f_fam']" ); widget = fam.findnodes( "widget[@name='$f_widget']" ); INCLUDE html/cell colspan=2; INCLUDE html/cell align='right' content=field.findvalue( 'label' ); INCLUDE html/cell align='center' content=fam.findvalue( 'label' ); INCLUDE html/cell align='left' content=widget.findvalue( 'label' ); END; END; END; END; WRAPPER html/row; INCLUDE html/cell colspan=5 content="
"; END; WRAPPER html/row; INCLUDE html/cell colspan=5 content="Attributes Available for Output"; END; FOR f_table IN params.dims.keys; table = config.findnodes( "/reporter/tables/table[@id='$f_table']"); tname = table.findvalue( "label" ); tdesc = table.findvalue( "desription" ); NEXT IF table.findvalue('@fact-table') == 'true'; WRAPPER html/row; INCLUDE html/cell; INCLUDE html/cell colspan=4 align='left' content=tname; END; FOR field IN table.findnodes('fields/field[not(@primary) or @primary != "true"]'); fname = field.findvalue( "label" ); fdesc = field.findvalue( "desription" ); WRAPPER html/row; INCLUDE html/cell colspan=2; INCLUDE html/cell align='right' content=fname; INCLUDE html/cell colspan=2 align='center' content=fdesc; END; END; END; END; END; BLOCK run_stage2; logme(tmpl.params); params = utils.JSON2perl( tmpl.params ); %]
[% INCLUDE hidden name='stage2' value=CGI.param('id'); WRAPPER html/table border=0 width='100%'; WRAPPER html/row; WRAPPER html/cell colspan=4 align='center'; s1_name_xpath = '/reporter/tables/table[@id="' _ params.stage1 _ '"]/label'; INCLUDE anchor text=config.findvalue( s1_name_xpath ) href="stage1?id=" _ params.stage1; ' :: ' _ params.templatename; END; END; WRAPPER html/row; INCLUDE html/cell colspan=4 content="Filterable Attributes:"; END; FOR f_table IN params.filter.keys; logme([f_table]); table = config.findnodes( "/reporter/tables/table[@id='$f_table']"); WRAPPER html/row; INCLUDE html/cell colspan=3 align='left' content=table.findvalue( 'label' ); END; FOR f_field IN params.filter.$f_table.keys; logme([f_table,f_field]); FOR f_fam IN params.filter.$f_table.$f_field.keys; logme([f_table,f_field,f_fam]); f_widget = params.filter.$f_table.$f_field.$f_fam; logme([f_table,f_field,f_fam,f_widget]); WRAPPER html/row; field = table.findnodes( "fields/field[@name='$f_field']" ); fam = config.findnodes( "/reporter/widgets/widget-family[@name='$f_fam']" ); widget = fam.findnodes( "widget[@name='$f_widget']" ); w_file = 'widgets/' _ fam.findvalue('@name') _ '.' _ widget.findvalue('@name'); INCLUDE html/cell; INCLUDE html/cell align='right' content=field.findvalue( 'label' ); WRAPPER html/cell align='center'; TRY; classname = table.findvalue('@id'); fieldname = field.findvalue('@name'); widgetname = widget.findvalue('@name'); famname = fam.findvalue('@name'); input_prefix = "filter:$famname:$widgetname:$classname:$fieldname"; INCLUDE $w_file widget_family=fam; CATCH; %]ARG!! Couldn't render widget [% $w_file %] ([% error.info %])!!![% END; END; END; END; END; END; WRAPPER html/row; INCLUDE html/cell colspan=4 content="
"; END; WRAPPER html/row; INCLUDE html/cell colspan=4 content="Attributes Available for Output"; END; FOR f_table IN params.dims.keys; table = config.findnodes( "/reporter/tables/table[@id='$f_table']"); classname = table.findvalue( "@id" ); tname = table.findvalue( "label" ); tdesc = table.findvalue( "desription" ); WRAPPER html/row; INCLUDE html/cell colspan=4 align='left' content=tname; END; fields_xpath = 'fields/field[not(@primary) or @primary != "true"]'; FOR field IN table.findnodes(fields_xpath); link_test = '../../links/link[@field="' _ field.findvalue('@name') _ '"]'; logme(['link_test',link_test]); NEXT IF field.findnodes( link_test ); fname = field.findvalue( "label" ); fid = field.findvalue( "@name" ); WRAPPER html/row; WRAPPER html/cell align='right'; INCLUDE checkbox name="output:$classname:$fid" value="include"; END; INCLUDE html/cell align='right' content=fname; WRAPPER html/cell align='center'; 'Output Transformation: '; dtype = field.findvalue('@datatype'); WRAPPER select name="xform:type:$classname:$fid"; INCLUDE option value='' content='None' selected=1; FOR xform IN dtype_xform_map.$dtype; xform_label = dtype_xforms.$xform.label; IF dtype_xforms.$xform.param; xform_label = "$xform_label (*)"; END; INCLUDE option value=xform content=xform_label; END; END; '
'; '*Output Tranformation Parameter: '; INCLUDE text name="xform:param:$classname:$fid"; END; END; END; END; END; INCLUDE checkbox name="publicreport" value="t"; 'Public Report
'; INCLUDE submit name="action" value="Run Now"; INCLUDE submit name="action" value="Schedule"; %]
[% END; %]