Files
Facilitor/APPL/FAC/fac_usrgraph.inc
Erik Groener b693dcc9dc FSN#37514 PENTEST PINE: 4.2.6 fac_usr_graph.asp toont SQL statement
svn path=/Website/trunk/; revision=30388
2016-08-23 13:07:23 +00:00

468 lines
18 KiB
C++

<% /*
$Revision$
$Id$
fac_usrgraph.inc
*/%>
<!-- #include file="./fac_usrrap.inc" -->
<!-- #include file="../shared/json2.js" -->
<%
function fac_graph_type (usrgraph_key)
{
var sql;
var oRs;
sql = "SELECT fac_usrgraph_type FROM fac_usrgraph WHERE fac_usrgraph_key = "+usrgraph_key;
oRs = Oracle.Execute( sql );
return oRs("fac_usrgraph_type").Value;
}
function fac_graph_sql_query (p_tableName, l_functie_key, fclt_key, params)
{
// Wat variabelen
var sql,sql1,sql_where,sql_order, sql_rep;
var oRs, oRs2;
// Start opbouw SQL-query
sql1 = "SELECT * FROM " + p_tableName;
// De '3D' conditie
var sqlWhere3D = usrrap.create3Dclause(p_tableName, l_functie_key);
// Order by clause
sql = "SELECT fac.usrrap_orderby(" + safe.quoted_sql(p_tableName) + ") FROM dual";
oRs = Oracle.Execute(sql);
sql_order = oRs.Fields(0).Value;
sql_order = ''
oRs.close();
//
sql_where = "";
sql_cond = " WHERE ";
if (sqlWhere3D != "")
{
sql_where += sql_cond + sqlWhere3D
sql_cond = " AND ";
}
if (fclt_key > 0)
{
sql_where += sql_cond + " FCLT_KEY=" + fclt_key;
sql_cond = " AND ";
}
for (var i=0; i<=9; i++)
{
if (params.fclt_text[i])
{
sql_where += sql_cond + " FCLT_TEXT" + i + "=" + safe.quoted_sql(params.fclt_text[i]);
sql_cond = " AND ";
}
}
sql_rep = sql1 + sql_where + sql_order;
return (sql_rep);
}
function getGraphInit(usrgraph_key, fclt_key, params)
{
var sql = "SELECT "+lcl.xsqla("fac_usrgraph_omschrijving", "fac_usrgraph_key") +","
+ " fac_usrgraph_type,"
+ " fac_usrgraph_view_name,"
+ " fac_usrgraph_maxrows,"
+ " fac_usrgraph_orderby,"
+ " fac_functie_key,"
+ " fac_usrgraph_options,"
+ " fac_usrgraph_limiet0,"
+ " fac_usrgraph_limiet1,"
+ " fac_usrgraph_limiet2,"
+ " fac_usrgraph_limiet3"
+ " FROM fac_usrgraph"
+ " WHERE fac_usrgraph_key = "+usrgraph_key;
var oRs = Oracle.Execute( sql );
var sql_select = fac_graph_sql_query(oRs("fac_usrgraph_view_name").Value, oRs("fac_functie_key").Value, fclt_key, params);
var fac_option = oRs("fac_usrgraph_options").Value || "{}";
var limiet_arr = [ oRs("fac_usrgraph_limiet0").Value
, oRs("fac_usrgraph_limiet1").Value
, oRs("fac_usrgraph_limiet2").Value
, oRs("fac_usrgraph_limiet3").Value
];
var userGraphInit = { title : oRs("fac_usrgraph_omschrijving").Value || ""
, type : oRs("fac_usrgraph_type").Value
, maxrows : oRs("fac_usrgraph_maxrows").Value || 0
, limiet : limiet_arr
, fac_options : fac_option
, sql_orderby : oRs("fac_usrgraph_orderby").Value || ""
, sql : sql_select
};
oRs.Close();
return userGraphInit;
}
function getGraphColors(graphInit)
{
var myColors = "";
var myXs = "";
var sql = graphInit.sql + (graphInit.sql_orderby? " ORDER BY " + graphInit.sql_orderby : "");
oRs = Oracle.Execute(sql);
// Eerst kijken of de optionele kolom fclt_color aanwezig is.
var hasColorField = false;
if (!oRs.Eof)
{
for (var i = 0; i < oRs.Fields.Count; i++)
{
if (oRs.Fields(i).Name.toUpperCase() == "FCLT_COLOR")
hasColorField = true;
}
}
if (hasColorField)
{
while (!oRs.Eof)
{
myColors += (myColors != "" ? ", '" : "['") + oRs("fclt_color").Value + "'";
myXs += (myXs != ""? ", '" : "") + oRs("fclt_color").Value + " | " + oRs("fclt_xas_").Value;
oRs.Movenext();
}
myColors += "]";
}
if (myColors == "")
myColors = false;
oRs.Close();
return myColors;
}
function getGraphAxes(sql)
{
var kolomnaam;
var l_url = null;
var l_xas = {};
var l_yas = {};
var l_zas = [];
var oRs = Oracle.Execute(sql); // eerst een keer voor de kolomnamen
for (i= 0; i < oRs.Fields.Count; i++)
{
var kolomnaam = oRs.Fields(i).Name;
if (kolomnaam.substring(0,8).toUpperCase() == "FCLT_URL")
{
l_url = kolomnaam;
}
if (kolomnaam.substring(0,9).toUpperCase() == "FCLT_XAS_")
{
l_xas = {kolom: kolomnaam, naam: kolomnaam.substring(9)};
}
if (kolomnaam.substring(0,9).toUpperCase() == "FCLT_YAS_")
{
l_yas = {nr: 1, kolom: kolomnaam, naam: kolomnaam.substring(9)};
l_zas.push(l_yas);
}
// Alle overige y-assen.
for (j=2; j < 10; j++)
{
if (kolomnaam.substring(0,10).toUpperCase() == "FCLT_YAS"+j+"_")
{
l_yas = {nr: j, kolom: kolomnaam, naam: kolomnaam.substring(10)};
l_zas.push(l_yas);
}
}
}
oRs.Close();
var userGraphAxes = { url: l_url
, xas: l_xas
, yas: l_zas
};
return userGraphAxes;
}
function getGraphData(graphInit, graphAxes)
{
var sql = "SELECT * FROM (" + graphInit.sql + ")";
if (graphInit.sql_orderby)
{
// overrule de standaard (hieronder): sorteren wat in de kolomnaam fac_usrgraph_orderby(!) staat..
sql = sql + " ORDER BY " + graphInit.sql_orderby;
}
else
{
// standaard sorteren op de hoogte y-as waarde (van hoog naar laag, b.v top 10).
sql = sql + " ORDER BY " + graphAxes.yas[0].kolom + " DESC";
graphInit.sql_orderby = graphAxes.yas[0].kolom + " DESC"; //Is nu ook voor getColors te gebruiken.
}
//
var l_arr_x = [];
var l_arr_y = [];
var l_arr_xy = [];
var l_arr_url = [];
var waarde = [];
var maxrows = graphInit.maxrows
// Maak een array aan voor alle beschikbare kolommen Y0..Yn
for (z=0; z < graphAxes.yas.length; z++)
{
l_arr_y.push([]);
}
var teller = 0;
var oRs = Oracle.Execute(sql);
while (!oRs.Eof)
{
teller++;
if (graphAxes.url)
{
l_arr_url.push(oRs(graphAxes.url).Value) || "";
}
l_x = oRs(graphAxes.xas.kolom).Value;
if (teller > graphInit.maxrows && graphInit.maxrows != 0)
{
l_x = safe.jsstring(L("lcl_fac_graph_others"));
l_arr_x[maxrows-1] = l_x;
l_arr_xy[maxrows-1] = [l_x, l_arr_y[0][maxrows-1]];
for (z=0; z < graphAxes.yas.length; z++)
{
l_y = oRs(graphAxes.yas[z].kolom).Value;
l_arr_y[z][maxrows-1] = l_arr_y[z][maxrows-1] + l_y;
}
}
else
{
l_arr_x.push(l_x);
for (z=0; z < graphAxes.yas.length; z++)
{
l_y = oRs(graphAxes.yas[z].kolom).Value;
l_arr_y[z].push(l_y);
}
l_y0 = oRs(graphAxes.yas[0].kolom).Value;
l_arr_xy.push([l_x, l_arr_y[0][teller-1]]);
}
oRs.Movenext();
}
oRs.Close();
var userGraphData = { teller: teller
, arr_x: l_arr_x
, arr_y: l_arr_y
, arr_url: l_arr_url
, arr_xy: l_arr_xy
};
return userGraphData;
}
function fac_graph_generate (usrgraph_key, fclt_key, params)
{
var params = params || {};
var graphInit = getGraphInit(usrgraph_key, fclt_key, params);
var graphAxes = getGraphAxes(graphInit.sql);
var graphData = getGraphData(graphInit, graphAxes);
if (fac_graph_type(usrgraph_key) == 1 || fac_graph_type(usrgraph_key) == 3 || fac_graph_type(usrgraph_key) == 4)
var graphColors = getGraphColors(graphInit);
// De sql-componenten moeten er nu uit: anders zijn ze zichtbaar in de grafiek html/js.
delete graphInit.sql_orderby;
delete graphInit.sql;
if (graphData.teller > 0)
{
%>
var JSONdata = '<%=safe.jsstring(JSON.stringify(graphInit))%>';
var l_init = eval('(' + JSONdata + ')');
var fac_options = eval('(' + l_init.fac_options + ')');
var l_userColors = <%=(graphColors? graphColors : 'false')%>;
var JSONdata = '<%=safe.jsstring(JSON.stringify(graphAxes))%>';
var l_axes = eval('(' + JSONdata + ')');
var JSONdata = '<%=safe.jsstring(JSON.stringify(graphData))%>';
var l_data = eval('(' + JSONdata + ')');
<%
// Onderstaande variabelen worden gebruikt in fac-options.
%>
var l_arr_x = l_data.arr_x;
var l_arr_y = l_data.arr_y;
var l_xas_naam = l_axes.xas.naam;
var l_yas_naam = l_axes.yas[0].naam;
var l_yas_count = l_axes.yas.length;
$.jqplot.config.enablePlugins = true;
var handler = function(ev, gridpos, datapos, neighbor, plot)
{
if (neighbor)
{
//alert('x:' + neighbor.data[0] + ' y:' + neighbor.data[1]);
if (l_data.arr_url[neighbor.pointIndex])
FcltMgr.openDetail(l_data.arr_url[neighbor.pointIndex], l_arr_x[neighbor.pointIndex]);
}
};
$.jqplot.eventListenerHooks.push(['jqplotClick', handler]);
<%
switch (graphInit.type)
{
case 1: // BarChart
%>
var l_colors = (l_yas_count == 1?<%=S("udr_graph_colors1")%> : <%=S("udr_graph_colors2")%>);
var props = { seriesDefaults:{ renderer: $.jqplot.BarRenderer
, rendererOptions: { fillToZero: true }
, pointLabels: { show: false }
}
, stackSeries: true
//, series:[{label:'a'},{label:'b'}]
//, legend: {show: (l_yas_count > 1)}
, title: l_init.title
, seriesColors: (l_userColors? l_userColors : l_colors)
, axes: { xaxis: { renderer: $.jqplot.CategoryAxisRenderer
, ticks: l_arr_x
, label: l_xas_naam
, tickRenderer: $.jqplot.CanvasAxisTickRenderer
, tickOptions: { enableFontSupport: true
, angle: 30
, fontSize: '9pt'
}
}
, yaxis: { label: l_yas_naam
, tickOptions: { formatString:'%.1f'
}
}
}
, highlighter: { show: true
, showMarker: false
, tooltipAxes: 'y'
, tooltipLocation: 'n'
, formatString: '<table style="background-color: #cccccc" class="xjqplot-highlighter"><tr><td>%s</td></tr></table>'
}
};
plot1 = $.jqplot( 'myGraph'
, l_arr_y
, $.extend(true, props, fac_options)
);
<%
break;
case 2: // MeterGauge
%>
var l_x = l_arr_x[0];
var l_y = l_arr_y[0];
var limiet0 = l_init.limiet[0];
var limiet1 = l_init.limiet[1];
var limiet2 = l_init.limiet[2];
var limiet3 = l_init.limiet[3];
var props = { title: l_init.title
, seriesDefaults: { renderer: $.jqplot.MeterGaugeRenderer
, rendererOptions: { showTicks: true
, showTickLabels: true
, label: l_init.title + l_x + "/" + l_y
, labelPosition: 'bottom'
, labelHeightAdjust: -5
, background: '#f0f0f0'
, tickColor: '#333333'
, ringColor: '#333333'
, ringWidth: 3
, min: limiet0
, max: limiet3
, intervals: [limiet1, limiet2, limiet3]
, intervalColors: ['red','orange','green']
}
}
};
plot1 = $.jqplot( 'myGraph'
, [ [100* l_x / l_y] ]
, $.extend(true, props, fac_options)
);
<%
break;
case 3: // pie-chart
%>
var l_colors = <%=S("udr_graph_pie_colors")%>;
var props = { title: l_init.title
, seriesColors: (l_userColors? l_userColors : l_colors)
, seriesDefaults: { renderer:$.jqplot.PieRenderer
, showDataLabels: true
, rendererOptions: { fill: true
, showDataLabels: true
, dataLabelPositionFactor: 1.2
, dataLabelCenterOn: true
}
}
, legend: { show: true
, location: 'ne'
}
, grid: { drawBorder: false
, shadow : false
, background: '#ffffff'
}
};
plot1 = $.jqplot( 'myGraph'
, [l_data.arr_xy]
, $.extend(true, props, fac_options)
)
<%
break;
case 4: // LineChart
%>
var l_labels = [];
for (y=0; y<l_axes.yas.length; y++)
{
l_labels.push(l_axes.yas[y].naam);
}
var l_colors = (l_yas_count == 1? <%=S("udr_graph_colors1")%> : <%=S("udr_graph_colors2")%>);
var props = { seriesDefaults: { pointLabels: { show: true
}
}
, stackSeries: false
, title: l_init.title
, seriesColors: (l_userColors? l_userColors : l_colors)
, legend: { show: (l_yas_count > 1)
, placement: (l_yas_count > 1?'outsideGrid' : 'intsideGrind')
, location: 'ne'
, labels: l_labels
}
, axes: { xaxis: { renderer: $.jqplot.CategoryAxisRenderer
, ticks: l_arr_x
, label: l_xas_naam
, tickRenderer: $.jqplot.CanvasAxisTickRenderer
, tickOptions: { enableFontSupport: true
, angle: 30
}
}
, yaxis: { label: (l_yas_count == 1? l_yas_naam : '')
, tickOptions: { formatString: '%.1f'
}
}
}
, highlighter: { show: true
, showMarker: false
, tooltipAxes: 'y'
, tooltipLocation: 'n'
, formatString: '<table style="background-color: #cccccc" class="xjqplot-highlighter"><tr><td>%s</td></tr></table>'
}
};
plot1 = $.jqplot( 'myGraph'
, l_arr_y
, $.extend(true, props, fac_options)
);
<%
break;
default:
break;
}
} // if teller
}
%>