olap/templates/default/admin_olap.tpl

299 lines
12 KiB
Smarty
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!-- SET title -->Статистика<!-- END -->
<!-- SET headscripts -->
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jquery.min.js"></script>
<!--[if lte IE 8]><script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/excanvas.min.js"></script><![endif]-->
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.all.min.js"></script>
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.canvasTextRenderer.min.js"></script>
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.canvasAxisLabelRenderer.min.js"></script>
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.canvasAxisTickRenderer.min.js"></script>
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.categoryAxisRenderer.min.js"></script>
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.dateAxisRenderer.min.js"></script>
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.enhancedLegendRenderer.min.js"></script>
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.highlighter.min.js"></script>
<script language="javascript" type="text/javascript" src="{DOMAIN}/tpldata/jqplot.logAxisRenderer.min.js"></script>
<link rel="stylesheet" type="text/css" href="{DOMAIN}/tpldata/jquery.jqplot.css" />
<!-- END -->
<!-- INCLUDE "admin_header.tpl" -->
<!-- IF NOT srcid -->
<p>Добро пожаловать в простую OLAPообразную статистику. Выберите источник данных:</p>
<form action="?" method="GET">
<select style="width:100px" name="datasource">
<!-- FOR s = sources -->
<option value="{s s.id}">{s s.name}</option>
<!-- END -->
</select>
<input type="submit" value=" Продолжить " />
</form>
<!-- ELSE -->
<p>Выбранный источник данных: <b>{s src.name}</b>. <a href="?">Выбрать другой источник данных</a>.</p>
<p>Настройте желаемый отчёт:</p>
<form action="?" method="GET">
<input type="hidden" name="datasource" value="{s src.id}" />
<input type="hidden" name="build" value="1" />
<p style="margin-top: 16px">Показатель:</p>
<p style="margin-left: 20px">
<select style="width:100px" name="cell_aggr">
<!-- FOR f = aggregates -->
<option value="{s f.id}"<!-- IF eq(cell.aggr, f.id) --> selected="selected"<!-- END -->>{s f.name}</option>
<!-- END -->
</select>
<select style="width:100px" name="cell_field">
<option value="">---</option>
<!-- FOR f = fielddescs -->
<option value="{s f.id}"<!-- IF eq(cell.field, f.id) --> selected="selected"<!-- END -->>{s f.name}</option>
<!-- END -->
</select>
<select style="width:100px" name="cell_func">
<option value="">без преобразования</option>
<!-- FOR f = functions -->
<option value="{s f.id}"<!-- IF eq(cell.func, f.id) --> selected="selected"<!-- END -->><!-- IF f.time -->(время) <!-- END -->{s f.name}</option>
<!-- END -->
</select>
</p>
<p style="margin-top: 16px">Группировка: &nbsp; &nbsp; количество полей: <input type="text" name="field_count" value="{field_count}" /></p>
<ol>
<!-- FOR fld = range(0,sub(field_count,1)) -->
<li>
<!-- SET gf = get(group_fields,fld) -->
<p><select name="group-type-{fld}">
<option value="">---</option>
<!-- FOR g = group_types -->
<option value="{g.id}"<!-- IF eq(gf.type,g.id) --> selected="selected" <!-- END -->>{s g.name}</option>
<!-- END -->
</select>
<!-- INCLUDE "admin_olap_field.tpl" -->
</p>
<p><select style="width:100px" name="group-sort_dir-{fld}">
<option value="asc">По возрастанию</option>
<option value="desc"<!-- IF eq(gf.sort_dir, 'desc') --> selected="selected"<!-- END -->>По убыванию</option>
</select>
<select style="width:100px" name="group-sort_aggr-{fld}">
<option value="">по значениям поля</option>
<!-- FOR f = aggregates -->
<!-- IF NOT f.cell_only -->
<option value="{s f.id}"<!-- IF eq(gf.sort_aggr, f.id) --> selected="selected"<!-- END -->>{s f.name} другого поля:</option>
<!-- END -->
<!-- END -->
</select>
<!-- SET ft = 'sort_' --><!-- INCLUDE "admin_olap_field.tpl" --><!-- SET ft = '' -->
</p>
</li>
<!-- END -->
</ol>
<p style="margin-top: 16px">Условия выборки данных:</p>
<table style="margin-left: 20px">
<!-- FOR f = fielddescs -->
<tr><th style="text-align: left; vertical-align: top">{s f.name}</th>
<td style="text-align: left; vertical-align: top">
=
<!-- IF f.options -->
<select style="width: 100px" name="where-eq-{f.id}">
<option value="">любой</option>
<!-- FOR o = f.options -->
<option value="{s o.id}"<!-- IF o.selected --> selected="selected"<!-- END -->>{s o.name}</option>
<!-- END -->
</select>
<!-- ELSE -->
<input style="width: 100px" type="text" name="where-eq-{f.id}" value="{s get(request,concat('where-eq-',f.id))}" />
<!-- END -->
<!-- IF f.le_ge -->
или &ge; <input style="width: 100px" type="text" name="where-ge-{f.id}" value="{s get(request,concat('where-ge-',f.id))}" />
и &le; <input style="width: 100px" type="text" name="where-le-{f.id}" value="{s get(request,concat('where-le-',f.id))}" />
<!-- END -->
<!-- IF f.is_time --> (YYYY-MM-DD HH:MM:SS)<!-- END -->
{f.comment}
</td></tr>
<!-- END -->
</table>
<p style="margin-top: 16px"><input type="submit" style="width: 200px" value=" Построить отчёт " /></p>
</form>
<!-- IF build -->
<h1>Отчёт</h1>
<p><a href="{s rpt_link}">Ссылка на данный отчёт</a> | <a href="{s csv_link}">В формате CSV</a></p>
<!-- IF and(not tables, not graphs) -->
<p>Нет данных для показа.</p>
<!-- ELSIF groups -->
<!-- EXEC('block_groups') -->
<!-- ELSIF graphs -->
<!-- EXEC('block_graphs') -->
<!-- ELSE -->
<!-- EXEC('block_tables') -->
<!-- END -->
<p>Отчёт занял {time_elapsed} сек. Использовано {memory} памяти для работы.</p>
<!-- END -->
<!-- END -->
<!-- INCLUDE "admin_footer.tpl" -->
<!-- FUNCTION block_groups -->
<!-- FOR group = groups -->
<div style="width: 900px; height: 400px; margin-top: 20px" id="group{group_index}"></div>
<!-- END -->
<p>
<input type="checkbox" name="graph_log" id="graph_log" value="1"
onclick="doPlot(this.checked)" />
<label for="graph_log">Логарифмическая шкала графиков</label>
</p>
<script language="javascript" type="text/javascript">
var g = [
<!-- FOR group = groups -->{yesno(group_index,',','')}
{
id: "group{group_index}",
desc: "{q join(', ',group.full_desc)}",
numeric: {yesno(group.numeric,'true','false')},
data: [
<!-- FOR graph = group.graphs -->{yesno(graph_index,',','')}
[
<!-- FOR g = graph.data -->
[ {yesno(group.numeric,g[0],concat("'",q(g[0]),"'"))}, {g[1]} ],
<!-- END -->
]
<!-- END -->
],
x: "{q group.graphs[0].field}<!-- IF group.graphs[0].func --> ({q group.graphs[0].func})<!-- END -->",
dateAxis: '{group.date_axis}',
titles: [
<!-- FOR graph = group.graphs -->{yesno(graph_index,',','')}
'{q graph.last_desc}'
<!-- END -->
]
}
<!-- END -->
];
var yLabel = '{cell.value_desc}';
var yLabelBr = '{cell.value_desc_brace}';
var plots = [];
$.jqplot.config.enablePlugins = true;
$(document).ready(function(){
doPlot($('#graph_log').attr('checked'));
});
function doPlot(logarithmic)
{
for (var i = 0; i < g.length; i++)
{
var ik = i;
if (plots[i])
plots[i].destroy();
plots[i] = $.jqplot(g[i].id, g[i].data, {
seriesDefaults: {
rendererOptions: { smooth: true }
},
title: g[i].desc,
highlighter: {
showTooltip: true,
bringSeriesToFront: true,
tooltipAxes: 'x',
tooltipContentEditor: function(str, series, point, plot) {
var p = g[ik].data[series][point];
return g[ik].x+' = '+p[0]+'<br />'+yLabelBr+' = '+p[1];
},
},
cursor: {
show: false,
},
legend: {
show: true,
renderer: $.jqplot.EnhancedLegendRenderer,
location: 'ne',
placement: 'outsideGrid',
labels: g[i].titles
},
axesDefaults: {
tickRenderer: $.jqplot.CanvasAxisTickRenderer,
tickOptions: {
fontSize: '10pt'
}
},
axes: {
xaxis: {
label: g[i].x,
labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
renderer: g[i].dateAxis ? $.jqplot.DateAxisRenderer : (g[i].numeric ? $.jqplot.LinearAxisRenderer : $.jqplot.CategoryAxisRenderer),
sortMergedLabels: true,
useStringSort: true,
tickOptions: {
angle: -30,
formatString: g[i].dateAxis
}
},
yaxis: {
label: yLabel,
renderer: logarithmic ? $.jqplot.LogAxisRenderer : $.jqplot.LinearAxisRenderer,
labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
tickOptions: {
labelPosition: 'end'
}
}
}
});
}
}
</script>
<!-- END -->
<!-- FUNCTION block_graphs -->
<!-- FOR graph = graphs -->
<!-- IF graph.desc -->
<!-- SET o = 0 -->
<!-- FOR d = graph.desc -->
<!--# Описание графика (поле: значение, ..., только значения, не равные значениям предыдущего графика) -->
<!-- SET o = o || !graph_index || graphs[graph_index-1].desc[d_index].value != d.value -->
<!-- IF o -->
<p style="margin-left: {mul(d_index,20)}px">{d.field}<!-- IF d.func --> ({lc d.func})<!-- END -->: {d.value}</p>
<!-- END -->
<!-- END -->
<div style="margin-left: {mul(count(graph.desc),20)}px">
<!-- END -->
<table>
<!-- IF graph.bi_sign -->
<tr><th colspan="4">- {graph.field}<!-- IF graph.func --> ({lc graph.func})<!-- END --> +</th></tr>
<!-- FOR g = graph.data -->
<tr>
<td><div style="float: right; background: red; height: 7px; width: {g[3]}px"></div></td>
<td>{s g[0]}:&nbsp;</td><td>{s g[1]}</td>
<td><div style="background: blue; height: 7px; width: {g[2]}px"></div></td>
</tr>
<!-- END -->
<!-- ELSE -->
<tr><th style="text-align: left" colspan="2">{graph.field}<!-- IF graph.func --> ({lc graph.func})<!-- END --></th></tr>
<!-- FOR g = graph.data -->
<tr><td>{s g[0]}:&nbsp;</td><td>{s g[1]}</td><td><div style="background: blue; height: 7px; width: {g[2]}px"></div></td></tr>
<!-- END -->
<!-- END -->
</table>
<!-- IF graph.desc -->
</div>
<!-- END -->
<!-- END -->
<!-- END -->
<!-- FUNCTION block_tables -->
<!-- FOR table = tables -->
<!-- IF table.desc -->
<!-- SET o = 0 -->
<!-- FOR d = table.desc -->
<!-- SET o = o || !table_index || tables[table_index-1].desc[d_index].value != d.value -->
<!-- IF o -->
<p style="margin-left: {mul(d_index,20)}px">{d.field}<!-- IF d.func --> ({lc d.func})<!-- END -->: {d.value}</p>
<!-- END -->
<!-- END -->
<div style="margin-left: {mul(count(table.desc),20)}px">
<!-- END -->
<table class="simpletable center">
<!-- FOR row = table.rows -->
<tr>
<!-- FOR c = row -->
<!-- IF is_array(c) -->
<th<!-- IF c.colspan --> colspan="{c.colspan}"<!-- END --><!-- IF c.rowspan --> rowspan="{c.rowspan}"<!-- END --><!-- IF c.class --> class="{c.class}"<!-- END -->>{c.text}</th>
<!-- ELSE -->
<td>{c}</td>
<!-- END -->
<!-- END -->
</tr>
<!-- END -->
</table>
<!-- IF table.desc -->
</div>
<!-- END -->
<!-- END -->
<!-- END -->