4 WRAPPER header.ttk + navbar.ttk title="Report Templates";
13 PROCESS logic_header.ttk;
14 PROCESS select_sorter.js;
16 templates = DBI.tie('reporter.stage2', 'id')
17 reports = DBI.tie('reporter.stage3', 'id')
22 tid = CGI.param('id');
23 tmpl = templates.$tid;
26 IF CGI.param('action') == 'save';
28 ELSIF CGI.param('action') == 'edit';
29 rid = CGI.param('report');
31 report = utils.JSON2perl( r.params );
33 ELSIF CGI.param('action') == 'run';
46 stage1 = CGI.param('stage1');
47 pub = CGI.param('publictemplate') OR 'f';
53 logme([p,CGI.param(p)]);
62 AND (CGI.param("$p1").list.grep("^$p2$").size > 0)
63 AND (CGI.param("$p1:$p2").list.grep("^$p3$").size > 0)
64 AND (CGI.param("$p1:$p2:$p3").list.grep("^$p4$").size > 0);
66 p_obj.$p1.$p2.$p3.$p4 = CGI.param(p);
69 AND (CGI.param("$p1").list.grep(p2).size > 0);
72 p_obj.$p1 = CGI.param(p);
77 params = utils.perl2JSON( p_obj );
79 logme([stage1, params, owner, pub]);
81 q = DBI.prepare( stage2_insert );
82 CALL q.execute(stage1, params, owner, pub);
84 FOR new_s2 = DBI.query("SELECT * FROM reporter.stage2_id_seq;");
85 tid = new_s2.last_value;
86 INCLUDE view_stage2 tmpl = templates.$tid;
103 params = utils.JSON2perl( tmpl.params );
105 WRAPPER html/table border=0 width='100%';
107 WRAPPER html/cell colspan=5 align='center';
108 s1_name_xpath = '/reporter/tables/table[@id="' _ params.stage1 _ '"]/label';
110 content=config.findvalue( s1_name_xpath )
111 href="stage1?id=" _ params.stage1;
112 ' :: ' _ params.templatename _ '<br>';
114 content="Create a report from this template"
115 href=CGI.url('-path', 1) _ '?action=run&id=' _ tmpl.id;
120 INCLUDE html/cell colspan=4 content="<b>Filterable Attributes:</b>";
123 core_table = params.stage1;
125 tables = params.filter.keys;
126 tables.unshift(core_table);
127 tables = tables.unique;
130 logme(['table id or link id', t]);
132 f_table = INCLUDE find_table_id id=t;
134 table = config.findnodes( "/reporter/tables/table[@id='$f_table']");
137 WRAPPER html/cell colspan=4 align='left';
140 link_xpath = '//*[@id="' _ t _ '"]';
141 dim_link = config.findnodes(link_xpath);
144 '../../fields/field[@name="' _
145 dim_link.findvalue('@field') _ '"]/label';
146 dim_link.findvalue(link_label_xpath);
151 table.findvalue( 'label' );
155 FOR f_field = params.filter.$t.keys;
156 logme([f_table,f_field]);
157 FOR f_fam = params.filter.$t.$f_field.keys;
158 logme([f_table,f_field,f_fam]);
159 f_widget = params.filter.$t.$f_field.$f_fam;
160 logme([f_table,f_field,f_fam,f_widget]);
163 field = table.findnodes( "fields/field[@name='$f_field']" );
164 fam = config.findnodes( "/reporter/widgets/widget-family[@name='$f_fam']" );
165 widget = fam.findnodes( "widget[@name='$f_widget']" );
167 INCLUDE html/cell colspan=2;
168 INCLUDE html/cell align='right' content=field.findvalue( 'label' );
169 INCLUDE html/cell align='center' content=fam.findvalue( 'label' );
170 INCLUDE html/cell align='left' content=widget.findvalue( 'label' );
177 INCLUDE html/cell colspan=5 content="<br>";
181 INCLUDE html/cell colspan=5 content="<b>Attributes Available for Output</b>";
184 tables = params.dims.keys;
185 tables.unshift(core_table);
186 tables = tables.unique;
190 f_table = INCLUDE find_table_id id=t;
192 table = config.findnodes( "/reporter/tables/table[@id='$f_table']");
193 tname = table.findvalue( "label" );
194 tdesc = table.findvalue( "desription" );
196 #NEXT IF table.findvalue('@fact-table') == 'true';
200 WRAPPER html/cell colspan=4 align='left';
202 link_xpath = '//*[@id="' _ t _ '"]';
203 dim_link = config.findnodes(link_xpath);
206 '../../fields/field[@name="' _
207 dim_link.findvalue('@field') _ '"]/label';
208 dim_link.findvalue(link_label_xpath);
217 FOR field = table.findnodes('fields/field[not(@primary) or @primary != "true"]');
218 link_test = 'links/link[@field="' _ field.findvalue('@name') _ '" and (not(@hidden) or @hidden!="false")]';
219 logme(['view_stage2 -> link_test',link_test]);
220 NEXT IF table.findnodes( link_test );
222 fname = field.findvalue( "label" );
223 fdesc = field.findvalue( "desription" );
227 INCLUDE html/cell colspan=2;
228 INCLUDE html/cell align='right' content=fname;
229 INCLUDE html/cell colspan=2 align='center' content=fdesc;
240 params = utils.JSON2perl( tmpl.params );
243 <script language="javascript">
246 function send_it (f) {
247 var bad_filters = [];
248 for (var i in filters) {
249 if (!f.elements[i].value) {
250 bad_filters.push(filters[i]);
253 if (bad_filters.length) {
255 for (var i in bad_filters)
256 fstring = fstring + "\n\t" + bad_filters[i];
258 alert('You must choose a value for these filters or settings:\n' + fstring);
262 Widget.Select.selectAll('output_order');
269 WRAPPER html/table width="100%";
271 WRAPPER html/cell align='center';
272 s1_name_xpath = '/reporter/tables/table[@id="' _ params.stage1 _ '"]/label';
274 content=config.findvalue( s1_name_xpath )
275 href="stage1?id=" _ params.stage1;
276 ' :: ' _ params.templatename;
283 WRAPPER form id="stage3_new" name="stage3_new" action="stage3" onsubmit="return send_it(this);" method="POST";
284 INCLUDE hidden name='stage2' value=CGI.param('id');
286 '<br/><center><b>Report Name:</b>';
289 rname = report.reportname _ ' (COPY)';
291 INCLUDE text name='reportname' size="50" value=rname;
292 '</center><br/><br/>';
293 '<script language="javascript">filters["reportname"] = "Report Name";</script>';
295 WRAPPER html/table width="100%";
296 WRAPPER html/row style="border-top: solid black 2px;";
297 INCLUDE html/cell colspan=2 content='<b>Output and Sort Order</b>' style="border-top: solid black 2px;";
298 INCLUDE html/cell colspan=2 content='<b>Output Formats</b>' align="center" style="border-top: solid black 2px;";
301 WRAPPER html/cell rowspan=3 width="25%";
302 WRAPPER select multi=1 size=5 id='output_order' name='output_order';
303 FOR column = report.output_order;
304 parts = column.split(':');
305 xpath = '/reporter/tables/table[@id="' _ parts.1 _ '"]/fields/field[@name="' _ parts.2 _ '"]';
306 IF parts.1 != params.stage1;
307 xpath = '//*[@id="' _ parts.1 _ '"]/@table';
308 name = config.findvalue(xpath);
309 xpath = '/reporter/tables/table[@id="' _ name _ '"]/fields/field[@name="' _ parts.2 _ '"]';
311 node = config.findnodes(xpath);
312 IF node.findvalue('@primary') == 'true' && parts.1 == params.stage1;
313 INCLUDE option value=column content='Per group count -- ' _ node.findvalue('description');
315 INCLUDE option value=column content=node.findvalue('description');
321 INCLUDE anchor href='javascript:void(0);' content='Up' onclick="Widget.Select.moveSelectedOptionsUp('output_order')";
324 WRAPPER html/cell align="right";
326 IF report.output_format.grep('csv') == 0;
329 INCLUDE checkbox name='output_format' value='csv';
331 INCLUDE html/cell content="CSV" align="left";
335 INCLUDE anchor href='javascript:void(0);' content='Down' onclick="Widget.Select.moveSelectedOptionsDown('output_order')";
338 WRAPPER html/cell align="right";
340 IF report.output_format.grep('excel') == 0;
343 INCLUDE checkbox name='output_format' value='excel';
345 INCLUDE html/cell content="Excel" align="left";
349 WRAPPER html/cell align="right" valign='top';
351 IF report.output_format.grep('html') == 0;
354 INCLUDE checkbox name='output_format' value='html';
356 WRAPPER html/cell align="left";
359 WRAPPER html/row + html/cell colspan=2;
360 "<i>Graph types</i>";
365 IF report.output_format.grep('bar') == 0;
368 INCLUDE checkbox name='html_graph_type' value='bar';
370 INCLUDE html/cell content='Bar';
375 IF report.output_format.grep('pie') == 0;
378 INCLUDE checkbox name='html_graph_type' value='pie';
380 INCLUDE html/cell content='Pie';
385 IF report.output_format.grep('line');
388 INCLUDE checkbox name='html_graph_type' value='line';
390 INCLUDE html/cell content='Line';
399 '<br/><br/><b>Pivot Column:</b> ';
400 WRAPPER select id='pivot_col' name='pivot_col';
401 INCLUDE option value='' content='No Pivot';
402 FOR column = report.output_order;
403 parts = column.split(':');
404 xpath = '/reporter/tables/table[@id="' _ parts.1 _ '"]/fields/field[@name="' _ parts.2 _ '"]/description';
405 IF parts.1 != params.stage1;
406 xpath = '//*[@id="' _ parts.1 _ '"]/@table';
407 name = config.findvalue(xpath);
408 xpath = '/reporter/tables/table[@id="' _ name _ '"]/fields/field[@name="' _ parts.2 _ '"]/description';
411 IF column == report.pivot_col;
414 INCLUDE option value=column content=config.findvalue(xpath);
419 WRAPPER html/table border=0 width='100%';
421 INCLUDE html/cell colspan=4 content="<b>Filterable Attributes</b><br/><br/>" style="border-top: solid black 2px;";
424 core_table = params.stage1;
426 tables = params.filter.keys;
427 tables.unshift(core_table) IF tables.grep("^$core_table$");
428 tables = tables.unique;
431 NEXT UNLESS params.filter.$t.keys;
432 f_table = INCLUDE find_table_id id=t;
433 table = config.findnodes( "/reporter/tables/table[@id='$f_table']");
435 table_label = table.findvalue( 'label' );
438 WRAPPER html/cell colspan=3 align='center' style="border: solid black 1px; background: lightgray;";
440 link_xpath = '//*[@id="' _ t _ '"]';
441 dim_link = config.findnodes(link_xpath);
444 '../../fields/field[@name="' _
445 dim_link.findvalue('@field') _ '"]/label';
447 table_label = table_label _ ' -- ' _ dim_link.findvalue(link_label_xpath);
453 FOR f_field = params.filter.$t.keys;
454 logme([f_table,f_field]);
455 FOR f_fam = params.filter.$t.$f_field.keys;
456 logme([f_table,f_field,f_fam]);
457 f_widget = params.filter.$t.$f_field.$f_fam;
458 logme([f_table,f_field,f_fam,f_widget]);
461 field = table.findnodes( "fields/field[@name='$f_field']" );
462 fam = config.findnodes( "/reporter/widgets/widget-family[@name='$f_fam']" );
463 widget = fam.findnodes( "widget[@name='$f_widget']" );
465 w_file = 'widgets/' _ fam.findvalue('@name') _ '.' _ widget.findvalue('@name');
466 INCLUDE html/cell align='left' style="padding-left: 50px;" content=field.findvalue( 'label' );
468 WRAPPER html/cell align='left';
470 classname = table.findvalue('@id');
471 fieldname = field.findvalue('@name');
472 widgetname = widget.findvalue('@name');
473 famname = fam.findvalue('@name');
476 input_prefix = "filter:$t:$fieldname:$famname:$widgetname";
477 current_value = report.filter.$t.$fieldname.$famname.$widgetname;
478 logme(current_value);
480 INCLUDE $w_file widget_family=fam;
482 %]ARG!! Couldn't render widget [% $w_file %] ([% error.info %])!!![%
491 INCLUDE html/cell colspan=4 content="<br>";
495 INCLUDE html/cell colspan=4 content="<b>Attributes Available for Output</b><br/><br/>" style="border-top: solid black 2px;";
498 table = config.findnodes( "/reporter/tables/table[@id='$core_table']" );
499 classname = table.findvalue( "@id" );
500 tname = table.findvalue( "label" );
501 tdesc = table.findvalue( "desription" );
504 INCLUDE html/cell colspan=4 align='center' content=tname style="border: solid black 1px; background: lightgray;";
507 pkey_field = table.findnodes('fields/field[@primary = "true"]');
508 pid = pkey_field.findvalue('@name');
509 plabel = pkey_field.findvalue('label');
512 WRAPPER html/cell align='left' style="padding-left: 50px;";
515 !report || report.output.$classname.$pid == 'include'
519 name="output:$classname:$pid"
521 onclick="field_add_remove(this)";
522 INCLUDE hidden name="xform:type:$classname:$pid" value="count_dist";
524 <script language="javascript">
525 outputs['[% "output:$classname:$pid" %]'] = '[% "Per group count of $plabel" %]';
527 Widget.Select.addOption(
529 '[% "output:$classname:$pid" %]',
530 '[% "Per group count of $plabel" %]'
535 "Per group count of $plabel<br/><br/>";
537 INCLUDE html/cell align='center';
541 tables = params.dims.keys;
542 tables.unshift(core_table);
543 tables = tables.unique;
547 FOR f_table = tables;
549 noheader = 1 IF f_table == core_table;
550 INCLUDE show_filter_atts;
552 INCLUDE html/cell colspan=4 content="<br/><br/>";
558 INCLUDE checkbox name="publicreport" value="t" checked=(report.publicreport == 't' ? 'checked' : '');
560 INCLUDE submit name="action" value="Run Now";
561 INCLUDE submit name="action" value="Schedule";
566 BLOCK show_filter_atts;
568 f_table = INCLUDE find_table_id id=t;
569 table = config.findnodes( "/reporter/tables/table[@id='$f_table']");
570 classname = table.findvalue( "@id" );
571 tname = table.findvalue( "label" );
572 tdesc = table.findvalue( "desription" );
576 WRAPPER html/cell colspan=4 align='center' style="border: solid black 1px; background: lightgray;";
578 link_xpath = '//*[@id="' _ t _ '"]';
579 dim_link = config.findnodes(link_xpath);
582 '../../fields/field[@name="' _
583 dim_link.findvalue('@field') _ '"]/label';
584 dim_link.findvalue(link_label_xpath);
593 fields_xpath = 'fields/field[(not(@primary) or @primary != "true") or @hidden="false"]';
598 FOR field = table.findnodes(fields_xpath);
599 link_test = '../../links/link[@field="' _ field.findvalue('@name') _ '" and (not(@hidden) or @hidden!="false")]';
600 link_test = 'links/link[@field="' _ field.findvalue('@name') _ '" and (not(@hidden) or @hidden!="false")]';
601 logme(['show_filter_atts -> link_test', t, link_test]);
602 NEXT IF table.findnodes( link_test );
604 fname = field.findvalue( "label" );
605 fid = field.findvalue( "@name" );
609 bg_color = 'lightcyan';
614 WRAPPER html/cell align='left' col=bg_color style="padding-left: 50px;";
616 name="output:$t:$fid"
618 onclick="field_add_remove(this)"
619 checked=(report.output.$t.$fid == 'include' ? 'checked' : '');
621 <script language="javascript">
622 outputs['[% "output:$t:$fid" %]'] = '[% fname %]';
628 INCLUDE html/cell align='right' content='Output Transformation:' col=bg_color;
629 WRAPPER html/cell align='left' col=bg_color style="padding-left: 50px;";
631 dtype = field.findvalue('@transform-group');
633 dtype = field.findvalue('@datatype');
636 WRAPPER select id="xform:type:$t:$fid" name="xform:type:$t:$fid" onchange="show_hide_params(this)";
637 INCLUDE option value='' content='None' selected=(report.xform.type.$t.$fid == '' ? 1 : 0);
638 FOR xform = dtype_xform_map.$dtype;
639 xform_label = dtype_xforms.$xform.label;
640 IF dtype_xforms.$xform.param;
641 xform_label = "$xform_label (*)";
643 INCLUDE option value=xform content=xform_label selected=(report.xform.type.$t.$fid == xform ? 1 : 0);
650 <span id="hide-param:xform:type:[% t %]:[% fid %]" [% 'style="visibility: hidden;"' IF !report.xform.param.$t.$fid %] >
651 <small><super>*</super>Output Tranformation Parameter: </small>
652 [% INCLUDE text name="xform:param:$t:$fid" value=report.xform.param.$t.$fid %]