From b42a6743e117c6a22b3718be21ce741669f6ff46 Mon Sep 17 00:00:00 2001 From: zarzuelo Date: Tue, 6 Mar 2012 17:23:46 +0000 Subject: [PATCH] 2012-03-06 Sergio Martin * include/functions_graph.php include/graphs/functions_pchart.php include/graphs/functions_flot.php include/graphs/flot/pandora.flot.js include/graphs/fgraph.php include/pchart_graph.php include/FusionCharts include/pChart include/functions_ui.php images/chart_curve_threshold.png: Clean graphs code and add threshold (warning and critical min) * operation/reporting/reporting_viewer.php include/functions_reporting.php: Improve the top_n merged from 4.0 git-svn-id: https://svn.code.sf.net/p/pandora/code/trunk@5697 c3f86ba8-e40f-0410-aaad-9ba5e7f4b01f --- pandora_console/ChangeLog | 19 + .../images/chart_curve_threshold.png | Bin 0 -> 797 bytes .../include/FusionCharts/FCF_Area2D.swf | Bin 19788 -> 0 bytes .../include/FusionCharts/FCF_Column3D.swf | Bin 21031 -> 0 bytes .../include/FusionCharts/FCF_MSArea2D.swf | Bin 20816 -> 0 bytes .../include/FusionCharts/FCF_MSLine.swf | Bin 21493 -> 0 bytes .../include/FusionCharts/FCF_Pie3D.swf | Bin 10300 -> 0 bytes .../FusionCharts/FCF_StackedArea2D.swf | Bin 21505 -> 0 bytes .../include/FusionCharts/FusionCharts.js | 361 -- .../include/FusionCharts/FusionCharts.php | 150 - .../include/FusionCharts/FusionCharts_Gen.php | 2166 ---------- pandora_console/include/functions_graph.php | 93 +- .../include/functions_reporting.php | 72 +- pandora_console/include/functions_ui.php | 2 +- pandora_console/include/graphs/fgraph.php | 6 +- .../include/graphs/flot/pandora.flot.js | 215 +- .../include/graphs/functions_flot.php | 90 +- .../include/graphs/functions_pchart.php | 6 +- pandora_console/include/pChart/pCache.class | 120 - pandora_console/include/pChart/pChart.class | 3714 ----------------- pandora_console/include/pChart/pData.class | 266 -- pandora_console/include/pchart_graph.php | 657 --- .../operation/reporting/reporting_viewer.php | 60 +- 23 files changed, 318 insertions(+), 7679 deletions(-) create mode 100644 pandora_console/images/chart_curve_threshold.png delete mode 100644 pandora_console/include/FusionCharts/FCF_Area2D.swf delete mode 100644 pandora_console/include/FusionCharts/FCF_Column3D.swf delete mode 100644 pandora_console/include/FusionCharts/FCF_MSArea2D.swf delete mode 100644 pandora_console/include/FusionCharts/FCF_MSLine.swf delete mode 100644 pandora_console/include/FusionCharts/FCF_Pie3D.swf delete mode 100644 pandora_console/include/FusionCharts/FCF_StackedArea2D.swf delete mode 100644 pandora_console/include/FusionCharts/FusionCharts.js delete mode 100644 pandora_console/include/FusionCharts/FusionCharts.php delete mode 100644 pandora_console/include/FusionCharts/FusionCharts_Gen.php delete mode 100644 pandora_console/include/pChart/pCache.class delete mode 100644 pandora_console/include/pChart/pChart.class delete mode 100644 pandora_console/include/pChart/pData.class delete mode 100644 pandora_console/include/pchart_graph.php diff --git a/pandora_console/ChangeLog b/pandora_console/ChangeLog index da8d5f76d5..14ecec4d19 100644 --- a/pandora_console/ChangeLog +++ b/pandora_console/ChangeLog @@ -1,3 +1,22 @@ +2012-03-06 Sergio Martin + + * include/functions_graph.php + include/graphs/functions_pchart.php + include/graphs/functions_flot.php + include/graphs/flot/pandora.flot.js + include/graphs/fgraph.php + include/pchart_graph.php + include/FusionCharts + include/pChart + include/functions_ui.php + images/chart_curve_threshold.png: Clean graphs code + and add threshold (warning and critical min) + + * operation/reporting/reporting_viewer.php + include/functions_reporting.php: Improve the top_n + merged from 4.0 + + 2012-03-05 Miguel de Dios * pandora_console/include/graphs/functions_flot.php: added the function diff --git a/pandora_console/images/chart_curve_threshold.png b/pandora_console/images/chart_curve_threshold.png new file mode 100644 index 0000000000000000000000000000000000000000..b71c867f82aa46ef60be58c8572ca3429a79b45b GIT binary patch literal 797 zcmV+&1LFLNP)Px#24YJ`L;wH)0002_L%V+f000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyY% z3>6D-D?07~00Ny!L_t(I%axPQZ&Xzj$3OSJ``(+GIu0#C#DWq^(L-4YuN* z9Y3}Fm{A;zSYupzE=po zER?f3$;mk<=X`&t`T6-v*4j}g0wVmM&{|`R>CMc{d}yrAM?YFvm}F_`6>_HugPc59 zfMARx40Dtc02vra(OMWk(Yf})>7M|MLy$N&B#B3{XkDJ8jLD@?%u-KhVVZ^#gx2Pk zpw%k5LeVM&=NteEz)nm^+*rXcSI9ks?;8NJ%o6xMpvbZe-}ey&PkVT4s|vvEJvQ(X zNfM!k-@uBXP{di6$H_fn=TLxTVD`g_;B8o2-JYx0>x*u4>`~S^+TOb3KkWT+xaqnB z{a(xTHkwhkrsS7NbD@*uG$ZSpTb{-JcyRY{1t8rK>7}b=4hja81rwAIJepCNo)r!jGdxwm zQxJv$s?vCdf#~Ce!4V27rJqLl=?ZBxqcb!}yI#VklrVMu2l`_8 z^V4^E{9v79lT*0KDVFcvqk8mpcEv6`vNvj{@bcyF=%tnm;}yO*_YO*F+W9lJseZhj z|A{_el-_1?^YZj_rWvbN_nODY#-1}2fJu^Md2Vj5Dm&T+K?LMK+~|2;vb%f)*vE@U b4*dEQF2O9xekSwg00000NkvXXu0mjfGtPAj literal 0 HcmV?d00001 diff --git a/pandora_console/include/FusionCharts/FCF_Area2D.swf b/pandora_console/include/FusionCharts/FCF_Area2D.swf deleted file mode 100644 index 224fb17ebf9ca999c8fc2c750e3f98ddd7629f6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19788 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 diff --git a/pandora_console/include/FusionCharts/FCF_Column3D.swf b/pandora_console/include/FusionCharts/FCF_Column3D.swf deleted file mode 100644 index a0236429201acbcecef4749e5b8e1ccbc7f9c094..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21031 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 z 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 diff --git a/pandora_console/include/FusionCharts/FCF_MSArea2D.swf b/pandora_console/include/FusionCharts/FCF_MSArea2D.swf deleted file mode 100644 index bff3774ae9f103fc5a95691da8dcad8b41c84854..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20816 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 Os)yz{&OZSN$JhHJZrLXQ diff --git a/pandora_console/include/FusionCharts/FCF_StackedArea2D.swf b/pandora_console/include/FusionCharts/FCF_StackedArea2D.swf deleted file mode 100644 index 5f8d3e7a1164ea05a7aade602da12e7625257a28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21505 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 diff --git a/pandora_console/include/FusionCharts/FusionCharts.js b/pandora_console/include/FusionCharts/FusionCharts.js deleted file mode 100644 index fbfa1a439a..0000000000 --- a/pandora_console/include/FusionCharts/FusionCharts.js +++ /dev/null @@ -1,361 +0,0 @@ -/** - * FusionCharts: Flash Player detection and Chart embedding. - * Version 1.2.3F ( 22 November 2008) - Specialized for FusionChartsFREE - * Checking Flash Version >=6 and added updateChartXML() for FREE Charts. - * Version: 1.2.3 (1st September, 2008) - Added Fix for % and & characters, scaled dimensions, fixes in to properly handling of double quotes and single quotes in setDataXML() function. - * Version: 1.2.2 (10th July, 2008) - Added Fix for % scaled dimensions, fixes in setDataXML() and setDataURL() functions - * Version: 1.2.1 (21st December, 2007) - Added setting up Transparent/opaque mode: setTransparent() function - * Version: 1.2 (1st November, 2007) - Added FORM fixes for IE - * Version: 1.1 (29th June, 2007) - Added Player detection, New conditional fixes for IE - * - * Morphed from SWFObject (http://blog.deconcept.com/swfobject/) under MIT License: - * http://www.opensource.org/licenses/mit-license.php - * - */ -if(typeof infosoftglobal == "undefined") var infosoftglobal = new Object(); -if(typeof infosoftglobal.FusionChartsUtil == "undefined") infosoftglobal.FusionChartsUtil = new Object(); -infosoftglobal.FusionCharts = function(swf, id, w, h, debugMode, registerWithJS, c, scaleMode, lang, detectFlashVersion, autoInstallRedirect){ - if (!document.getElementById) { return; } - - //Flag to see whether data has been set initially - this.initialDataSet = false; - - //Create container objects - this.params = new Object(); - this.variables = new Object(); - this.attributes = new Array(); - - //Set attributes for the SWF - if(swf) { this.setAttribute('swf', swf); } - if(id) { this.setAttribute('id', id); } - - w=w.toString().replace(/\%$/,"%25"); - if(w) { this.setAttribute('width', w); } - h=h.toString().replace(/\%$/,"%25"); - if(h) { this.setAttribute('height', h); } - - - //Set background color - if(c) { this.addParam('bgcolor', c); } - - //Set Quality - this.addParam('quality', 'high'); - - //Add scripting access parameter - this.addParam('allowScriptAccess', 'always'); - - //Pass width and height to be appended as chartWidth and chartHeight - this.addVariable('chartWidth', w); - this.addVariable('chartHeight', h); - - //Whether in debug mode - debugMode = debugMode ? debugMode : 0; - this.addVariable('debugMode', debugMode); - //Pass DOM ID to Chart - this.addVariable('DOMId', id); - //Whether to registed with JavaScript - registerWithJS = registerWithJS ? registerWithJS : 0; - this.addVariable('registerWithJS', registerWithJS); - - //Scale Mode of chart - scaleMode = scaleMode ? scaleMode : 'noScale'; - this.addVariable('scaleMode', scaleMode); - - //Application Message Language - lang = lang ? lang : 'EN'; - this.addVariable('lang', lang); - - //Whether to auto detect and re-direct to Flash Player installation - this.detectFlashVersion = detectFlashVersion?detectFlashVersion:1; - this.autoInstallRedirect = autoInstallRedirect?autoInstallRedirect:1; - - //Ger Flash Player version - this.installedVer = infosoftglobal.FusionChartsUtil.getPlayerVersion(); - - if (!window.opera && document.all && this.installedVer.major > 7) { - // Only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE - infosoftglobal.FusionCharts.doPrepUnload = true; - } -}; - -infosoftglobal.FusionCharts.prototype = { - setAttribute: function(name, value){ - this.attributes[name] = value; - }, - getAttribute: function(name){ - return this.attributes[name]; - }, - addParam: function(name, value){ - this.params[name] = value; - }, - getParams: function(){ - return this.params; - }, - addVariable: function(name, value){ - this.variables[name] = value; - }, - getVariable: function(name){ - return this.variables[name]; - }, - getVariables: function(){ - return this.variables; - }, - getVariablePairs: function(){ - var variablePairs = new Array(); - var key; - var variables = this.getVariables(); - for(key in variables){ - variablePairs.push(key +"="+ variables[key]); - } - return variablePairs; - }, - getSWFHTML: function() { - var swfNode = ""; - if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { - // netscape plugin architecture - swfNode = ' 0){ swfNode += 'flashvars="'+ pairs +'"'; } - swfNode += '/>'; - } else { // PC IE - swfNode = ''; - swfNode += ''; - var params = this.getParams(); - for(var key in params) { - swfNode += ''; - } - var pairs = this.getVariablePairs().join("&"); - if(pairs.length > 0) {swfNode += '';} - swfNode += ""; - } - return swfNode; - }, - setDataURL: function(strDataURL){ - //This method sets the data URL for the chart. - //If being set initially - if (this.initialDataSet==false){ - this.addVariable('dataURL',strDataURL); - //Update flag - this.initialDataSet = true; - }else{ - //Else, we update the chart data using External Interface - //Get reference to chart object - var chartObj = infosoftglobal.FusionChartsUtil.getChartObject(this.getAttribute('id')); - - if (!chartObj.setDataURL) - { - __flash__addCallback(chartObj, "setDataURL"); - } - - chartObj.setDataURL(strDataURL); - } - }, - //This function : - //fixes the double quoted attributes to single quotes - //Encodes all quotes inside attribute values - //Encodes % to %25 and & to %26; - encodeDataXML: function(strDataXML){ - - var regExpReservedCharacters=["\\$","\\+"]; - var arrDQAtt=strDataXML.match(/=\s*\".*?\"/g); - if (arrDQAtt){ - for(var i=0;i compatibility - //Check if it's added in Mozilla embed array or if already exits - if(!document.embeds[this.getAttribute('id')] && !window[this.getAttribute('id')]) - window[this.getAttribute('id')]=document.getElementById(this.getAttribute('id')); - //or else document.forms[formName/formIndex][chartId] - return true; - } - } -}; - -/* ---- detection functions ---- */ -infosoftglobal.FusionChartsUtil.getPlayerVersion = function(){ - var PlayerVersion = new infosoftglobal.PlayerVersion([0,0,0]); - if(navigator.plugins && navigator.mimeTypes.length){ - var x = navigator.plugins["Shockwave Flash"]; - if(x && x.description) { - PlayerVersion = new infosoftglobal.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split(".")); - } - }else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0){ - //If Windows CE - var axo = 1; - var counter = 3; - while(axo) { - try { - counter++; - axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter); - PlayerVersion = new infosoftglobal.PlayerVersion([counter,0,0]); - } catch (e) { - axo = null; - } - } - } else { - // Win IE (non mobile) - // Do minor version lookup in IE, but avoid Flash Player 6 crashing issues - try{ - var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); - }catch(e){ - try { - var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); - PlayerVersion = new infosoftglobal.PlayerVersion([6,0,21]); - axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code) - } catch(e) { - if (PlayerVersion.major == 6) { - return PlayerVersion; - } - } - try { - axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); - } catch(e) {} - } - if (axo != null) { - PlayerVersion = new infosoftglobal.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(",")); - } - } - return PlayerVersion; -}; -infosoftglobal.PlayerVersion = function(arrVersion){ - this.major = arrVersion[0] != null ? parseInt(arrVersion[0]) : 0; - this.minor = arrVersion[1] != null ? parseInt(arrVersion[1]) : 0; - this.rev = arrVersion[2] != null ? parseInt(arrVersion[2]) : 0; -}; -// ------------ Fix for Out of Memory Bug in IE in FP9 ---------------// -/* Fix for video streaming bug */ -infosoftglobal.FusionChartsUtil.cleanupSWFs = function() { - var objects = document.getElementsByTagName("OBJECT"); - for (var i = objects.length - 1; i >= 0; i--) { - objects[i].style.display = 'none'; - for (var x in objects[i]) { - if (typeof objects[i][x] == 'function') { - objects[i][x] = function(){}; - } - } - } -}; -// Fixes bug in fp9 -if (infosoftglobal.FusionCharts.doPrepUnload) { - if (!infosoftglobal.unloadSet) { - infosoftglobal.FusionChartsUtil.prepUnload = function() { - __flash_unloadHandler = function(){}; - __flash_savedUnloadHandler = function(){}; - window.attachEvent("onunload", infosoftglobal.FusionChartsUtil.cleanupSWFs); - }; - window.attachEvent("onbeforeunload", infosoftglobal.FusionChartsUtil.prepUnload); - infosoftglobal.unloadSet = true; - } -} -/* Add document.getElementById if needed (mobile IE < 5) */ -if (!document.getElementById && document.all) { document.getElementById = function(id) { return document.all[id]; };} -/* Add Array.push if needed (ie5) */ -if (Array.prototype.push == null) { Array.prototype.push = function(item) { this[this.length] = item; return this.length; };} - -/* Function to return Flash Object from ID */ -infosoftglobal.FusionChartsUtil.getChartObject = function(id) -{ - var chartRef=null; - if (navigator.appName.indexOf("Microsoft Internet")==-1) { - if (document.embeds && document.embeds[id]) - chartRef = document.embeds[id]; - else - chartRef = window.document[id]; - } - else { - chartRef = window[id]; - } - if (!chartRef) - chartRef = document.getElementById(id); - - return chartRef; -}; -/* - Function to update chart's data at client side (FOR FusionCharts vFREE and 2.x -*/ -infosoftglobal.FusionChartsUtil.updateChartXML = function(chartId, strXML){ - //Get reference to chart object - var chartObj = infosoftglobal.FusionChartsUtil.getChartObject(chartId); - //Set dataURL to null - chartObj.SetVariable("_root.dataURL",""); - //Set the flag - chartObj.SetVariable("_root.isNewData","1"); - //Set the actual data - chartObj.SetVariable("_root.newData",strXML); - //Go to the required frame - chartObj.TGotoLabel("/", "JavaScriptHandler"); -}; - - -/* Aliases for easy usage */ -var getChartFromId = infosoftglobal.FusionChartsUtil.getChartObject; -var updateChartXML = infosoftglobal.FusionChartsUtil.updateChartXML; -var FusionCharts = infosoftglobal.FusionCharts; \ No newline at end of file diff --git a/pandora_console/include/FusionCharts/FusionCharts.php b/pandora_console/include/FusionCharts/FusionCharts.php deleted file mode 100644 index b856779c0f..0000000000 --- a/pandora_console/include/FusionCharts/FusionCharts.php +++ /dev/null @@ -1,150 +0,0 @@ -0) - $strDataURL .= "&FCCurrTime=" . Date("H_i_s"); - else - $strDataURL .= "?FCCurrTime=" . Date("H_i_s"); - } - // URL Encode it - return urlencode($strDataURL); -} - - -// datePart function converts MySQL database based on requested mask -// Param: $mask - what part of the date to return "m' for month,"d" for day, and "y" for year -// Param: $dateTimeStr - MySQL date/time format (yyyy-mm-dd HH:ii:ss) -function datePart($mask, $dateTimeStr) { - @list($datePt, $timePt) = explode(" ", $dateTimeStr); - $arDatePt = explode("-", $datePt); - $dataStr = ""; - // Ensure we have 3 parameters for the date - if (count($arDatePt) == 3) { - list($year, $month, $day) = $arDatePt; - // determine the request - switch ($mask) { - case "m": return (int)$month; - case "d": return (int)$day; - case "y": return (int)$year; - } - // default to mm/dd/yyyy - return (trim($month . "/" . $day . "/" . $year)); - } - return $dataStr; -} - - -// renderChart renders the JavaScript + HTML code required to embed a chart. -// This function assumes that you've already included the FusionCharts JavaScript class -// in your page. - -// $chartSWF - SWF File Name (and Path) of the chart which you intend to plot -// $strURL - If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method) -// $strXML - If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method) -// $chartId - Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id. -// $chartWidth - Intended width for the chart (in pixels) -// $chartHeight - Intended height for the chart (in pixels) -function renderChart($chartSWF, $strURL, $strXML, $chartId, $chartWidth, $chartHeight) { - //First we create a new DIV for each chart. We specify the name of DIV as "chartId"Div. - //DIV names are case-sensitive. - - // The Steps in the script block below are: - // - // 1)In the DIV the text "Chart" is shown to users before the chart has started loading - // (if there is a lag in relaying SWF from server). This text is also shown to users - // who do not have Flash Player installed. You can configure it as per your needs. - // - // 2) The chart is rendered using FusionCharts Class. Each chart's instance (JavaScript) Id - // is named as chart_"chartId". - // - // 3) Check whether we've to provide data using dataXML method or dataURL method - // save the data for usage below - if ($strXML=="") - $tempData = "//Set the dataURL of the chart\n\t\tchart_$chartId.setDataURL(\"$strURL\")"; - else - $tempData = "//Provide entire XML data using dataXML method\n\t\tchart_$chartId.setDataXML(\"$strXML\")"; - - // Set up necessary variables for the RENDERCAHRT - $chartIdDiv = $chartId . "Div"; - - // create a string for outputting by the caller - $render_chart = << -
- Chart. -
- - -RENDERCHART; - - return $render_chart; -} - - -//renderChartHTML function renders the HTML code for the JavaScript. This -//method does NOT embed the chart using JavaScript class. Instead, it uses -//direct HTML embedding. So, if you see the charts on IE 6 (or above), you'll -//see the "Click to activate..." message on the chart. -// $chartSWF - SWF File Name (and Path) of the chart which you intend to plot -// $strURL - If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method) -// $strXML - If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method) -// $chartId - Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id. -// $chartWidth - Intended width for the chart (in pixels) -// $chartHeight - Intended height for the chart (in pixels) -function renderChartHTML($chartSWF, $strURL, $strXML, $chartId, $chartWidth, $chartHeight) { - // Generate the FlashVars string based on whether dataURL has been provided - // or dataXML. - $strFlashVars = "&chartWidth=" . $chartWidth . "&chartHeight=" . $chartHeight ; - if ($strXML=="") - // DataURL Mode - $strFlashVars .= "&dataURL=" . $strURL; - else - //DataXML Mode - $strFlashVars .= "&dataXML=" . $strXML; - -$HTML_chart = << - - - - - - - - -HTMLCHART; - - return $HTML_chart; -} - -// boolToNum function converts boolean values to numeric (1/0) -function boolToNum($bVal) { - return (($bVal==true) ? 1 : 0); -} - -?> \ No newline at end of file diff --git a/pandora_console/include/FusionCharts/FusionCharts_Gen.php b/pandora_console/include/FusionCharts/FusionCharts_Gen.php deleted file mode 100644 index 29981c577a..0000000000 --- a/pandora_console/include/FusionCharts/FusionCharts_Gen.php +++ /dev/null @@ -1,2166 +0,0 @@ - single series, 2=> multi-series, 5=>Gantt ( - # For Future Use : 3=> scatter and bubble, 4=> MSStacked - var $seriesType; - - # Charts Atribute array - var $chartParams = array(); #List of Chart Parameters - var $chartParamsCounter; #Number of Chart parameters - - var $categoriesParam; # Categories Parameter Setting - var $categoryNames = array(); # Category array for storing Category set - var $categoryNamesCounter; # Category array counter - - var $dataset = array(); # dataset array - var $datasetParam = array(); # dataset parameter setting array - var $datasetCounter; # dataset array counter - var $setCounter; # set array counter - - - # trendLines array - var $trendLines = array(); # trendLines array - var $tLineCounter; # trendLines array counter - - #chart messages - var $chartMSG; - - var $chartSWF = array(); # Charts SWF array - var $arr_FCColors = array(); # Color Set to be applied to dataplots - var $UserColorON; # User define color define true or false - var $userColorCounter; - - // Cache Control - var $noCache; - - var $DataBaseType; # DataBase Type - - var $encodeChars; # XML for dataXML or dataURL - -#############============ For Gantt Chart ============================ - # Gantt categories - var $GT_categories = array(); - var $GT_categories_Counter; - var $GT_categoriesParam = array(); - - var $GT_subcategories_Counter; - - # Gantt processes - var $GT_processes = array(); - var $GT_processes_Counter; - var $GT_processes_Param; - - # Gantt Tasks - var $GT_Tasks = array(); - var $GT_Tasks_Counter; - var $GT_Tasks_Param; - - # Gantt Connectors - var $GT_Connectors = array(); - var $GT_Connectors_Counter; - var $GT_Connectors_Param; - - # Gantt Milestones - var $GT_Milestones = array(); - var $GT_Milestones_Counter; - var $GT_Milestones_Param; - - # Gantt datatable - var $GT_datatable = array(); - var $GT_datatable_Counter; - var $GT_datatableParam; - var $GT_dataColumnParam = array(); - - var $GT_subdatatable_Counter; - - #------- For Futute Use (start)---------------- - # Gantt legend - var $GT_legend = array(); - var $GT_legend_Counter; - var $GT_legend_Param; - #------- For Futute Use (end)---------------- - - var $wMode; - - # Advanced Chart settings - var $JSC = array(); - -#############============ For Future Use (start)============================ - # dataset for MSStackedColumn2D - - var $MSSDataset = array(); # dataset array for MSStackedColumn2D - var $MSSDatasetParams = array(); # MSSDataset parameter setting - - var $MSSDatasetCounter; # MSSDataset array counter - var $MSSSubDatasetCounter; # ms sub dataset array counter - var $MSSSetCounter; # msset array counter - - # lineset - var $lineSet = array(); # lineSet array - var $lineSetParam = array(); # lineSet Parameter setting array - - var $lineCounter; # line array counter - var $lineSetCounter; # lineset array counter - var $lineIDCounter; # lineID counter; - - # vtrendLines array - var $vtrendLines = array(); # vtrendLines array - var $vtLineCounter; # vtrendLines array counter - - # style array - var $styles = array(); # styles array - var $styleDefCounter; # define counter - var $styleAppCounter; # apply counter - - -#############============ For Future Use (end)============================ - - - # FusionCharts Constructor, its take 4 Parameters. - # when we create object of FusionCharts, then Constructor will auto run and initialize - # chats array parameter like chartType, width, height, chartsID - function FusionCharts($chartType="column2d",$width="400",$height="300",$chartID="",$isTransparent=""){ - - $this->wMode=$isTransparent; - # Setting All Charts Array - $this->setChartArrays(); - - #initialise colorList - $this->colorInit(); - - # Setting Chart name - $this->chartType=strtolower($chartType); - # Getting Charts Series Type - $this->getSeriesType(); - - # Setting Charts Width and Height - $this->width=$width; - $this->height=$height; - - # Setting ChartID, Defult is Charts Name - if ($chartID==""){ - $chartCounter=@$_SESSION['chartcount']; - if($chartCounter<=0 || $chartCounter==NULL){ - $chartCounter=1; - } - - $this->chartID=$chartType . $chartCounter; - $_SESSION['chartcount']=++$chartCounter; - - }else{ - $this->chartID=$chartID; - } - - # Setting Defult Parameter Delimiter to ';' - $this->del=";"; - - # Setting Default SWF Path - $this->SWFPath=""; - $this->SWFFile=$this->SWFPath . "FCF_" . $this->chartSWF[$this->chartType][0] . ".swf"; - # Initialize categoriesParam - $this->categoriesParam=""; - $this->categoryNamesCounter=1; - - # Creating Category Array - $this->createCategory($this->categoryNamesCounter); - - # Initialize Dataset Variables - $this->datasetCounter=0; - $this->setCounter= 0; - if($this->seriesType>1){ - $this->setCounter++; - } - - # Initialize MSSDataset Variables - if($this->seriesType==4){ - $this->MSSDatasetCounter=0; - $this->MSSSubDatasetCounter=0; - $this->MSSSetCounter=0; - - $this->lineCounter=0; - $this->lineSetCounter=0; - $this->lineIDCounter=0; - } - - # vTrendLines Array inisialize - if($this->seriesType==3){ - $this->vtLineCounter=1; - $this->createvTrendLines($this->vtLineCounter); - } - - # TrendLines Array inisialize - $this->tLineCounter=1; - $this->createTrendLines($this->tLineCounter); - - # Styles Array inisialize - $this->styleDefCounter=1; - $this->styleAppCounter=1; - $this->createStyles("definition"); - $this->createSubStyles("definition","style"); - $this->createSubStylesParam("definition","style",$this->styleDefCounter); - - $this->GT_categories_Counter=0; - $this->GT_subcategories_Counter=0; - - $this->GT_processes_Counter=0; - $this->GT_processes_Param=""; - - $this->GT_Tasks_Counter=0; - $this->GT_Tasks_Param=""; - - # Gantt Connectors - $this->GT_Connectors_Counter=0; - $this->GT_Connectors_Param=""; - - # Gantt datatable - $this->GT_datatable_Counter=0; - $this->GT_datatableParam=""; - $this->GT_subdatatable_Counter=0; - - # Gantt legend - $this->GT_legend_Counter=0; - $this->GT_legend_Param=""; - - $this->chartMSG=""; - # XML store Variables - $this->strXML=""; - - $this->UserColorON = false; - $this->userColorCounter=0; - - $this->noCache=false; - $this->DataBaseType="mysql"; - - // JS Constructor - $this->JSC["debugmode"]=false; # debugmode default is false - $this->JSC["registerwithjs"]=false; # registerwithJS default is false - $this->JSC["bgcolor"]=""; # bgcolor default not set - $this->JSC["scalemode"]="noScale"; # scalemode default noScale - $this->JSC["lang"]="EN"; # Language default EN - - // dataXML type encode - $this->encodeChars=true; - - } - - -##------------ PUBLIC FUNCTIONS ---------------------------------------------------------------- - # Special Character - function encodeXMLChars($option=true){ - $this->$encodeChars=$option; - } - # Setting Parameter Delimiter, Defult Parameter Separator is ";" - function setParamDelimiter($strDel){ - $this->del=$strDel; - } - - # Database type set like ORACLE and MYSQL - function setDataBaseType($dbType){ - $this->DataBaseType=strtolower($dbType); - } - - # Setting path of SWF file. file name like FCF_Column3D.swf. where FCF_ is common for all SWF file - function setSWFPath($SWFPath){ - $this->SWFPath=$SWFPath; - $this->SWFFile=$this->SWFPath . "FCF_" . $this->chartSWF[$this->chartType][0] . ".swf"; - } - - # We can add or change single Chart parameter by setChartParam function - # its take Parameter Name and its Value - function setChartParam($paramName, $paramValue){ - $this->chartParams[$paramName]=$this->encodeSpecialChars($paramValue); - } - - # We can add or change Chart parameter sets by setChartParams function - # its take parameterset [ caption=xyz caption;subCaption=abcd abcd abcd;xAxisName=x axis;yAxisName=y's axis;bgColor=f2fec0;animation=1 ] - # Defult Parameter Separator is ";" - function setChartParams($strParam){ - $listArray=explode($this->del,$strParam); - foreach ($listArray as $valueArray) { - $paramValue=explode("=",$valueArray,2); - if($this->validateParam($paramValue)==true){ - $this->chartParams[$paramValue[0]]=$this->encodeSpecialChars($paramValue[1]); - } - } - } - - - # Setting Categories Parameter into categoriesParam variables - function setCategoriesParams($strParam){ - - $this->categoriesParam .= $this->ConvertParamToXMLAttribute($strParam); - } - - - # Function addCategoryFromDatabase adding Category from dataset - function addCategoryFromDatabase($query_result, $categoryColumn){ - if($this->DataBaseType=="mysql"){ - # fetching recordset till eof - while($row = mysql_fetch_array($query_result)){ - # add category - $this->addCategory($row[$categoryColumn],"","" ); - } - }elseif($this->DataBaseType=="oracle"){ - # fetching recordset till eof - while(OCIFetchInto($query_result, $row, OCI_ASSOC)){ - # add category - $this->addCategory($row[$categoryColumn],"","" ); - } - - } - } - - # Function addCategoryFromArray adding Category from Array - function addCategoryFromArray($categoryArray){ - # convert array to category set - foreach ($categoryArray as $value) { - # adding category - $this->addCategory($value); - } - } - - # Function for create set and catagory, dataset , set from array - function addChartDataFromArray($dataArray, $dataCatArray=""){ - if(is_array($dataArray)){ - if ($this->seriesType==1){ - # Single series Array - # aa[..][..]="name" aa[..][..]="value" - foreach($dataArray as $arrayvalue){ - if(is_array($arrayvalue)){ - $this->addChartData($arrayvalue[1],"name=" . $arrayvalue[0] ); - } - } - }else{ - # Multi series Array - if(is_array($dataCatArray)){ - foreach($dataCatArray as $value){ - $this->addCategory($value); - } - } - foreach($dataArray as $arrayvalue){ - if(is_array($arrayvalue)){ - $i=0; - $aaa[0]="";$aaa[1]=""; - foreach($arrayvalue as $value){ - if($i>=2){ - $this->addChartData($value); - }else{ - $aaa[$i]=$value; - } - if($i==1){ - $this->addDataset($aaa[0],$aaa[1]); - } - $i++; - - } - } - } - } - } - } - - # Function addCategory adding Category and vLine element - function addCategory($label="",$catParam="",$vlineParam = "" ){ - $strCatXML=""; - $strParam=""; - $label=$this->encodeSpecialChars($label); - # cheking vlineParam equal blank - if($vlineParam==""){ - # cheking catParam not blank - if($catParam!=""){ - - $strParam = $this->ConvertParamToXMLAttribute($catParam); - - } - # adding label and parameter set to category - $strCatXML =""; - - }else{ - - $strParam = $this->ConvertParamToXMLAttribute($vlineParam); - - # adding parameter set to vLine - $strCatXML=""; - } - # storing into categoryNames array - $this->categoryNames[$this->categoryNamesCounter]=$strCatXML; - # Increase Counter - $this->categoryNamesCounter++; - } - - - # adding dataset array element - function addDataset($seriesName, $strParam=""){ - $this->datasetCounter++; - $this->createDataset($this->datasetCounter); - - $this->setCounter++; - $this->createDataValues($this->datasetCounter,"_" . $this->setCounter); - - $seriesName=$this->encodeSpecialChars($seriesName); - # creating seriesName and dataset parameter set - $tempParam=""; - $tempParam ="seriesName='" . $seriesName . "' "; - $tempParam .= $this->ConvertParamToXMLAttribute($strParam); - - $colorParam=""; - $pos = strpos(strtolower($tempParam), " color"); - if ($pos === false) { - $colorParam=" color='" . $this->getColor($this->datasetCounter-1) . "'"; - } - - # setting datasetParam array - $this->datasetParam[$this->datasetCounter]=$tempParam . $colorParam; - - } - - - # Function addChartData adding set data element - function addChartData($value="",$setParam="",$vlineParam = "" ){ - $strSetXML=""; - - # Choosing dataset depend on seriesType and getting XML set - if($this->seriesType>=1 and $this->seriesType<=2){ - - $strSetXML=$this->setSSMSDataArray($value,$setParam,$vlineParam); - - }elseif ($this->seriesType==3){ - - $strSetXML=$this->setScatterBubbleDataArray($value,$setParam,$vlineParam); - - }elseif (($this->seriesType==4)){ - - $strSetXML=$this->setSSMSDataArray($value,$setParam,$vlineParam); - - } - - # Adding xml set to dataset array and Increase set counter - if ($this->seriesType==1){ - $this->dataset[$this->setCounter]=$strSetXML; - $this->setCounter++; - }elseif($this->seriesType>1 and $this->seriesType<4){ - $this->dataset[$this->datasetCounter]["_" . $this->setCounter]=$strSetXML; - $this->setCounter++; - }elseif($this->seriesType==4){ - $this->MSSDataset[$this->MSSDatasetCounter][$this->MSSSubDatasetCounter][$this->MSSSetCounter]=$strSetXML; - $this->MSSSetCounter++; - } - } - - # The addDatasetsFromDatabase() function adds dataset and set elements from - - # database, by Default, from MySql recordset. You can use setDatabaseType() function - - # to set the type of database to work on. - function addDatasetsFromDatabase($query_result, $ctrlField, $valueField,$datsetParamArray="",$link=""){ - - # Initialize variables - $paramset=""; - $tempContrl=""; - if(is_array($datsetParamArray)==false){ - $datsetParamArray=array(); - } - - # Calculate total no of array elements in datsetParamArray - $arrLimit=count($datsetParamArray); - $i=1; - $tempParam=""; - if($this->DataBaseType=="mysql"){ - ##### For My SQL Connection - $FieldArray=explode($this->del,$valueField); - if(count($FieldArray)>1){ - ### Muli Series - # fetching recordset - while($row = mysql_fetch_array($query_result)){ - # Add Category - $this->addCategory($row[$ctrlField]); - } - - $k=0; - # Add daatset for multiple fields - foreach ($FieldArray as $FieldName) { - - if($k<$arrLimit){ - $tempParam = $datsetParamArray[$k]; - }else{ - $tempParam=""; - } - # Add Dataset with adddataset() function - $this->addDataset($FieldName,$tempParam); - - # rewind query result - mysql_data_seek($query_result,0); - while($row = mysql_fetch_array($query_result)){ - - # Generating URL link - if($link==""){ - $paramset=""; - }else{ - # Generating URL link from getLinkFromPattern - $paramset="link=" . urlencode($this->getLinkFromPattern($row,$link)); - } - # add value to dataset - $this->addChartData($row[$FieldName], $paramset, ""); - - } - $k++; - } - - }else{ - - ### Single Series - # fetching recordset - while($row = mysql_fetch_array($query_result)){ - # Creating Control break depending on ctrlField - # if ctrlField value changes then dataset will be Generated - if ($tempContrl!=$row[$ctrlField]){ - if($i<=$arrLimit){ - $tempParam = $datsetParamArray[$i-1]; - }else{ - $tempParam=""; - } - # Add Dataset with adddataset() function - $this->addDataset($row[$ctrlField],$tempParam); - $tempContrl=$row[$ctrlField]; - $i++; - } - # Generating URL link - if($link==""){ - $paramset=""; - }else{ - # Generating URL link from getLinkFromPattern - $paramset="link=" . urlencode($this->getLinkFromPattern($row,$link)); - } - # add value to dataset - $this->addChartData($row[$valueField], $paramset, ""); - - } - } - }elseif($this->DataBaseType=="oracle"){ - # For Oracle Connection - # fetching recordset - while(OCIFetchInto($query_result, $row, OCI_ASSOC)){ - # Create Control break depending on ctrlField - # if ctrlField value changes then dataset will be Generated - if ($tempContrl!=$row[$ctrlField]){ - if($i<=$arrLimit){ - $tempParam = $datsetParamArray[$i-1]; - }else{ - $tempParam=""; - } - # add Dataset - $this->addDataset($row[$ctrlField],$tempParam); - $tempContrl=$row[$ctrlField]; - $i++; - } - # Generating URL link - if($link==""){ - $paramset=""; - }else{ - # Generating URL link from getLinkFromPattern - $paramset="link=" . urlencode($this->getLinkFromPattern($row,$link)); - } - # add value to dataset - $this->addChartData($row[$valueField], $paramset, ""); - } - } - } - - # addDataFromDatabase funcion take 5 parameter like query_result, label field, value field - # and initialize dataset variables and link - function addDataFromDatabase($query_result, $db_field_ChartData,$db_field_CategoryNames="", $strParam="",$LinkPlaceHolder=""){ - - $paramset=""; - if($this->DataBaseType=="mysql"){ - # fetching recordset till eof - while($row = mysql_fetch_array($query_result)){ - - if($LinkPlaceHolder==""){ - $paramset=""; - }else{ - # Getting link - $paramset="link=" . urlencode($this->getLinkFromPattern($row,$LinkPlaceHolder)); - } - if ($strParam=""){ - $strParam=$paramset; - }else{ - $strParam .= ";" . $paramset; - } - - # covert to set element and save to $partXML - if($db_field_CategoryNames==""){ - $data=@$row[$db_field_ChartData]; - if($strParam!="") - $this->addChartData($this->encodeSpecialChars($data),$strParam); - else - $this->addChartData($this->encodeSpecialChars($data)); - } - else{ - $data=@$row[$db_field_ChartData]; - $label=@$row[$db_field_CategoryNames]; - $this->addChartData($this->encodeSpecialChars($data),"name=" . $this->encodeSpecialChars($label) . ";" .$strParam,"" ); - } - } - }elseif($this->DataBaseType=="oracle"){ - # fetching recordset till eof - while(OCIFetchInto($query_result, $row, OCI_ASSOC)){ - - if($LinkPlaceHolder==""){ - $paramset=""; - }else{ - # Getting link - $paramset="link=" . urlencode($this->getLinkFromPattern($row,$LinkPlaceHolder)); - } - if ($strParam=""){ - $strParam=$paramset; - }else{ - $strParam .= ";" . $paramset; - } - - # covert to set element and save to $partXML - if($db_field_CategoryNames==""){ - $data=@$row[$db_field_ChartData]; - if($strParam!="") - $this->addChartData($this->encodeSpecialChars($data),$strParam); - else - $this->addChartData($this->encodeSpecialChars($data)); - } - else{ - $data=@$row[$db_field_ChartData]; - $label=@$row[$db_field_CategoryNames]; - $this->addChartData($this->encodeSpecialChars($data),"name=" . $this->encodeSpecialChars($label) . ";" .$strParam,"" ); - } - } - } - } - - # setTLine create TrendLine parameter - function addTrendLine($strParam){ - - $listArray=explode($this->del,$strParam); - foreach ($listArray as $valueArray) { - $paramValue=explode("=",$valueArray,2); - if($this->validateParam($paramValue)==true){ - $this->trendLines[$this->tLineCounter][$paramValue[0]]=$this->encodeSpecialChars($paramValue[1]); - } - } - $this->tLineCounter++; - } - - - #this function sets chart messages - function setChartMessage($strParam){ - $this->chartMSG="?"; - - $listArray=explode($this->del,$strParam); - foreach ($listArray as $valueArray) { - $paramValue=explode("=",$valueArray,2); - if($this->validateParam($paramValue)==true){ - $this->chartMSG.=$paramValue[0] . "=" . $this->encodeSpecialChars($paramValue[1]) . "&"; - } - } - $this->chartMSG=substr($this->chartMSG,0,strlen($this->chartMSG)-1); - } - - #### - This function is mostly for Future USE ----------------------------- - # set JS constructor of FusionCharts.js - function setAddChartParams($debugMode, $registerWithJS=0, $c="", $scaleMode="", $lang=""){ - $this->JSC["debugmode"]=$debugMode; - $this->JSC["registerwithjs"]=$registerWithJS; - $this->JSC["bgcolor"]=$c; - $this->JSC["scalemode"]=$scaleMode; - $this->JSC["lang"]=$lang; - - } - - # The function SetInitParam() adds extra chart settings - function setInitParam($tname,$tvalue){ - - $trimName= strtolower(str_replace(" ","",$tname)); - $this->JSC[$trimName]=$tvalue; - - } - - # getXML render all class arrays to XML output - function getXML(){ - - $this->strXML=""; - - $strChartParam=""; - - - $strChartParam=$this->getChartParamsXML(); - if($this->seriesType==1){ - if(gettype(strpos($this->chartType,"line"))!="boolean"){ - if(strpos($strChartParam,"lineColor")===false){ - $colorSet=$this->getColor(0); - $this->setChartParams("lineColor=" . $colorSet ); - } - - } - if(gettype(strpos($this->chartType,"area"))!="boolean"){ - if(strpos($strChartParam,"areaBgColor")===false){ - $colorSet=$this->getColor(0); - $this->setChartParams("areaBgColor=" . $colorSet ); - } - } - } - - - # calling getChartParamsXML function for chart parameter - $this->strXML = "getChartParamsXML() . " >"; - if ($this->seriesType >= 0 and $this->seriesType <= 4) { - - # calling getCategoriesXML function for Category element - $this->strXML .= $this->getCategoriesXML(); - # calling getDatasetXML function for set element - $this->strXML .= $this->getDatasetXML(); - # calling getvTrendLinesXML function for vTrendLines element - if($this->seriesType==3){ - $this->strXML .= $this->getvTrendLinesXML(); - } - # Calling getLinesetXML - if($this->seriesType==4){ - $this->strXML .= $this->getLinesetXML(); - } - # calling getTrendLinesXML function for TrendLines element - $this->strXML .= $this->getTrendLinesXML(); - # calling getStylesXML function for Styles element - $this->strXML .= $this->getStylesXML(); - - }else if($this->seriesType == 5) { - $this->strXML .= $this->getGanttCategoriesXML(); - $this->strXML .= $this->getProcessesXML(); - $this->strXML .= $this->getGanttDatatableXML(); - $this->strXML .= $this->getTasksXML(); - $this->strXML .= $this->getConnectorsXML(); - $this->strXML .= $this->getMilestonesXML(); - # calling getTrendLinesXML function for TrendLines element - $this->strXML .= $this->getTrendLinesXML(); - # calling getStylesXML function for Styles element - $this->strXML .= $this->getStylesXML(); - $this->strXML .= $this->getLegendXML(); - } - - # Closing Chart element - $this->strXML .= ""; - - # Return XML output - return $this->strXML; - } - - # set wMode - function setwMode($isTransparent=""){ - $this->wMode=$isTransparent; - } - - # Function getXML render all class arrays to XML output - function renderChart($isHTML=false, $display=true){ - - $this->strXML=$this->getXML(); - $this->SWFFile=$this->SWFPath . "FCF_" . $this->chartSWF[$this->chartType][0] . ".swf"; - - if($this->noCache==true){ - if($this->chartMSG==""){ - $this->chartMSG = "?nocache=" . microtime(); - }else{ - $this->chartMSG .= "&nocache=" . microtime(); - } - } - - # print the charts - if($isHTML==false){ - if($display){ - print $this->renderChartJS($this->SWFFile . $this->chartMSG,"",$this->strXML,$this->chartID, $this->width, $this->height,$this->JSC["debugmode"], $this->JSC["registerwithjs"],$this->wMode); - }else{ - return $this->renderChartJS($this->SWFFile . $this->chartMSG,"",$this->strXML,$this->chartID, $this->width, $this->height,$this->JSC["debugmode"], $this->JSC["registerwithjs"],$this->wMode); - } - - }else{ - if($display){ - print $this->renderChartHTML($this->SWFFile . $this->chartMSG,"",$this->strXML,$this->chartID, $this->width, $this->height,$this->JSC["debugmode"], $this->JSC["registerwithjs"],$this->wMode); - }else{ - return $this->renderChartHTML($this->SWFFile . $this->chartMSG,"",$this->strXML,$this->chartID, $this->width, $this->height,$this->JSC["debugmode"], $this->JSC["registerwithjs"],$this->wMode); - } - } - - } - - # Sets whether chart SWF files are not to be cached - function setOffChartCaching($swfNoCache=false){ - $this->noCache=$swfNoCache; - } - - # Renders Chart form External XML data source - function renderChartFromExtXML($dataXML){ - print $this->renderChartJS($this->SWFFile,"",$dataXML,$this->chartID, $this->width, $this->height, $this->JSC["debugmode"], $this->JSC["registerwithjs"], $this->wMode); - } - - // RenderChartJS renders the JavaScript + HTML code required to embed a chart. - // This function assumes that you've already included the FusionCharts JavaScript class - // in your page. - - // $chartSWF - SWF File Name (and Path) of the chart which you intend to plot - // $strURL - If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method) - // $strXML - If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method) - // $chartId - Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id. - // $chartWidth - Intended width for the chart (in pixels) - // $chartHeight - Intended height for the chart (in pixels) - // $debugMode - Whether to start the chart in debug mode - // $registerWithJS - Whether to ask chart to register itself with JavaScript - // $setTransparent - Transparent mode - function renderChartJS($chartSWF, $strURL, $strXML, $chartId, $chartWidth, $chartHeight, $debugMode=false, $registerWithJS=false, $setTransparent="") { - //First we create a new DIV for each chart. We specify the name of DIV as "chartId"Div. - //DIV names are case-sensitive. - - // The Steps in the script block below are: - // - // 1)In the DIV the text "Chart" is shown to users before the chart has started loading - // (if there is a lag in relaying SWF from server). This text is also shown to users - // who do not have Flash Player installed. You can configure it as per your needs. - // - // 2) The chart is rendered using FusionCharts Class. Each chart's instance (JavaScript) Id - // is named as chart_"chartId". - // - // 3) Check whether to provide data using dataXML method or dataURL method - // save the data for usage below - $strHTML=""; - - if ($strXML=="") - $tempData = "\t//Set the dataURL of the chart\n\tchart_$chartId.setDataURL(\"$strURL\");"; - else - $tempData = "\t//Provide entire XML data using dataXML method\n\tchart_$chartId.setDataXML(\"$strXML\");"; - - // Set up necessary variables for the RENDERCHART - $chartIdDiv = $chartId . "Div"; - $ndebugMode = $this->boolToNum($debugMode); - $nregisterWithJS = $this->boolToNum($registerWithJS); - $nsetTransparent=($setTransparent?"true":"false"); - - - // Create a string for output by the caller - - $strHTML .= "\n \n\n"; - - $strHTML .= "
\n"; - $strHTML .= "\tChart.\n"; - $strHTML .= "
\n"; - $strHTML .= "\n\n"; - $strHTML .= "\n"; - - return $strHTML; - - } - - - //RenderChartHTML function renders the HTML code for the JavaScript. This - //method does NOT embed the chart using JavaScript class. Instead, it uses - //direct HTML embedding. So, if you see the charts on IE 6 (or above), you'll - //see the "Click to activate..." message on the chart. - // $chartSWF - SWF File Name (and Path) of the chart which you intend to plot - // $strURL - If you intend to use dataURL method for this chart, pass the URL as this parameter. Else, set it to "" (in case of dataXML method) - // $strXML - If you intend to use dataXML method for this chart, pass the XML data as this parameter. Else, set it to "" (in case of dataURL method) - // $chartId - Id for the chart, using which it will be recognized in the HTML page. Each chart on the page needs to have a unique Id. - // $chartWidth - Intended width for the chart (in pixels) - // $chartHeight - Intended height for the chart (in pixels) - // $debugMode - Whether to start the chart in debug mode - // $registerWithJS - Whether to ask chart to register itself with JavaScript - // $setTransparent - Transparent mode - function renderChartHTML($chartSWF, $strURL, $strXML, $chartId, $chartWidth, $chartHeight, $debugMode=false,$registerWithJS=false, $setTransparent="") { - // Generate the FlashVars string based on whether dataURL has been provided or dataXML. - - $strHTML=""; - $strFlashVars = "&chartWidth=" . $chartWidth . "&chartHeight=" . $chartHeight . "&debugMode=" . $this->boolToNum($debugMode); - - $strFlashVars .= "&scaleMode=" . $this->JSC["scalemode"] . "&lang=" . $this->JSC["lang"]; - - if ($strXML=="") - // DataURL Mode - $strFlashVars .= "&dataURL=" . $strURL; - else - //DataXML Mode - $strFlashVars .= "&dataXML=" . $strXML; - - $nregisterWithJS = $this->boolToNum($registerWithJS); - if($setTransparent!=""){ - $nsetTransparent=($setTransparent==false?"opaque":"transparent"); - }else{ - $nsetTransparent="window"; - } - - $strHTML .= "\n\n\n"; - - $HTTP="http"; - if(strtolower($_SERVER['HTTPS'])=="on") - { - $HTTP="https"; - } - - $Strval = $_SERVER['HTTP_USER_AGENT']; - $pos=strpos($Strval,"MSIE"); - if($pos===false){ - - $strHTML .= "JSC["bgcolor"]!="")? " bgcolor=\"" . $this->JSC["bgcolor"] . "\"":"" . " allowScriptAccess=\"always\" type=\"application/x-shockwave-flash\" pluginspage=\"$HTTP://www.macromedia.com/go/getflashplayer\" wmode=\"$nsetTransparent\" \n"; - - }else{ - $strHTML .= " \n"; - $strHTML .= "\t \n"; - $strHTML .= "\t \n"; - $strHTML .= "\t \n"; - $strHTML .= "\t \n"; - $strHTML .= "\t \n"; - //Set background color - if($this->JSC["bgcolor"] !="") { - $strHTML .= "\tJSC["bgcolor"] . "\" /> \n"; - } - - $strHTML .= "\n"; - $strHTML .= "\n"; - - } - return $strHTML; - } - - // The function boolToNum() function converts boolean values to numeric (1/0) - function boolToNum($bVal) { - return (($bVal==true) ? 1 : 0); - } - - -##------------ PRIVATE FUNCTIONS ---------------------------------------------------------------- - - # getDatasetXML create set chart xml - function getDatasetXML(){ - # Calling dataset function depending on seriesType - switch ($this->seriesType){ - case 1 : - return $this->getSSDatasetXML(); - break; - case 2 : - return $this->getMSDatasetXML(); - break; - case 3 : - return $this->getMSDatasetXML(); - break; - case 4 : - return $this->getMSStackedDatasetXML(); - break; - } - } - # By getChartParamsXML, we can fetch charts array and convert into XML - # and return like "caption='xyz' xAxisName='x side' ............ - function getChartParamsXML(){ - $partXML=""; - # feching charts each array and converting into chat parameter - foreach($this->chartParams as $part_type => $part_name){ - $partXML .= $part_type . "='" . $this->encodeSpecialChars($part_name) . "' "; - } - # Return Chart Parameter - return $partXML; - } - - - # Function getCategoriesXML for getting Category part XML - function getCategoriesXML(){ - if($this->seriesType>1){ - $partXML=""; - # adding categories parameter - $partXML="categoriesParam . " >"; - if($this->categoryNamesCounter>1){ - foreach($this->categoryNames as $part_type => $part_name){ - if($part_name!=""){ - # adding elements - if($part_name!="Array"){ - $partXML .= $part_name; - } - } - } - } - # Closing - $partXML .=""; - return $partXML; - } - } - # creating single set element - # - # - - function getSSDatasetXML(){ - if($this->seriesType==1){ - $partXML=""; - foreach($this->dataset as $part_type => $part_name){ - if($part_name!=""){ - # adding elements - if($part_name!="Array"){ - $partXML .= $part_name; - } - } - } - return $partXML; - } - } - - # getMSDatasetXML for getting datset part XML - # - # - # - # - function getMSDatasetXML(){ - if($this->seriesType>1){ - $partXML=""; - foreach($this->dataset as $part_type => $part_name){ - $partXML .="datasetParam[$part_type] . " >"; - foreach($this->dataset[$part_type] as $part_type1 => $part_name1){ - if($part_name1!=""){ - # Adding elements - if($part_name1!="Array"){ - $partXML .= $part_name1; - } - } - } - $partXML .=""; - } - return $partXML; - } - } - - - # getTrendLinesXML create XML output depending on trendLines array - # - # - # - function getTrendLinesXML(){ - $partXML=""; - $lineXML=""; - # fetching trendLines array - foreach($this->trendLines as $l_type => $l_name){ - # staring line element - $lineXML .="trendLines[$l_type] as $part_type => $part_name){ - - $lineXML .= $part_type . "='" . $this->encodeSpecialChars($part_name) . "' "; - - } - # close line element - $lineXML .=" />"; - } - # if line element present then adding $lineXML with in trendLines element - - $pos = strpos($lineXML, "="); - if ($pos!==false){ - $partXML = "" . $lineXML . ""; - }else{ - # return nothing - $partXML=""; - } - # return trendLines xml - return $partXML; - } - - - - # adding set element to dataset element for seriesType 1 and 2 - function setSSMSDataArray($value="",$setParam="",$vlineParam = "" ){ - $strSetXML=""; - $strParam=""; - $color=0; - if($vlineParam==""){ - if($setParam!=""){ - $strParam = $this->ConvertParamToXMLAttribute($setParam); - - } - - $colorSet=""; - if ($this->UserColorON == true){ - if($this->seriesType==1 && (gettype(strpos($this->chartType,"line"))=="boolean" && gettype(strpos($this->chartType,"area"))=="boolean")){ - if(strpos(strtolower($strParam)," color")===false){ - $colorSet=" color='" . $this->getColor($this->setCounter) . "' "; - } - } - }else{ - if($this->seriesType==1 && (gettype(strpos($this->chartType,"pie"))=="boolean" && gettype(strpos($this->chartType,"line"))=="boolean" && gettype(strpos($this->chartType,"area"))=="boolean")){ - if(strpos(strtolower($strParam)," color")===false){ - $colorSet=" color='" . $this->getColor($this->setCounter) . "' "; - } - } - } - # setting set parameter - $strSetXML =""; - - }else{ - $strParam = $this->ConvertParamToXMLAttribute($strParam); - - # setting vline parameter - $strSetXML=""; - } - return $strSetXML; - } - - ## - - - - - - Array Init Functions - - --- - -- - - - - - - -- - - - - - - - # Function createCategory create array element with in Categories - function createCategory($catID){ - $this->categoryNames[$catID]= array(); - } - # createDataset dataset array element - function createDataset($dataID){ - $this->dataset[$dataID]= array(); - } - # creating set dataset array element - function createDataValues($datasetID, $dataID){ - $this->dataset[$datasetID][$dataID]= array(); - } - # createTrendLines create TrendLines array - function createTrendLines($lineID){ - $this->trendLines[$lineID] = array(); - } - # setTLine create TrendLine parameter - function setTLine($lineID,$paramName, $paramValue){ - $this->trendLines[$lineID][$paramName]=$paramValue; - } - - - # ----- ---------- ----- Misc utility functions ---- ------ ----------- - - # converting ' and " to %26apos; and " - function encodeSpecialChars($strValue){ - - $pattern="/%(?![\da-f]{2}|[\da-f]{4})/i"; - $strValue=preg_replace($pattern, "%25", $strValue); - - if ($this->encodeChars==true){ - $strValue=str_replace("&","%26",$strValue); - $strValue=str_replace("'","%26apos;",$strValue); - $strValue=str_replace("\"","%26quot;",$strValue); - - $strValue=preg_replace("/\
", "%26gt;",$strValue); - }else{ - $strValue=str_replace("'","'",$strValue); - $strValue=str_replace("\"",""",$strValue); - - $strValue=preg_replace("/\", ">",$strValue); - } - - $strValue=str_replace("=","%3d",$strValue); - $strValue=str_replace("+","%2b",$strValue); - - $strValue=str_replace("¢","%a2",$strValue); - $strValue=str_replace("£","%a3",$strValue); - $strValue=str_replace("€","%E2%82%AC",$strValue); - $strValue=str_replace("¥","%a5",$strValue); - $strValue=str_replace("₣","%e2%82%a3",$strValue); - - return $strValue; - - } - - # Its convert pattern link to original link - # abcd.php?cid=##Field_name_1##&pname=##Field_name_2## - function getLinkFromPattern($row,$tempLink){ - # convert link into array break on '##' - $aa=explode("##",$tempLink); - # Reading array - foreach($aa as $v){ - # Finding '=' into array - $pos = strpos($v, "="); - # not found '=' - if($pos === false){ - if($v!=""){ - $pet="##" . $v . "##"; - $tempLink=str_replace($pet,$row[$v],$tempLink); - } - } - } - return $tempLink; - } - - - # convertion of semi colon(;) separeted paramater to XML attribute - function ConvertParamToXMLAttribute($strParam){ - - $xmlParam=""; - $listArray=explode($this->del,$strParam); - foreach ($listArray as $valueArray) { - $paramValue=explode("=",$valueArray,2); - if($this->validateParam($paramValue)==true){ - # creating parameter set - $xmlParam .= $paramValue[0] . "='" . $this->encodeSpecialChars($paramValue[1]) . "' "; - } - } - - # Return - return $xmlParam; - - } - - function validateParam($paramValue){ - if(count($paramValue)>=2){ - if(trim($paramValue[0])==""){ - return false; - } - return true; - }else{ - return false; - } - } - - # Getting Charts series type from charts array. 1 => single series, 2=> multi-series, 3=> scatter and bubble, 4=> MSStacked. defult 1 => single series - function getSeriesType(){ - $sValue=1; - if(is_array($this->chartSWF[$this->chartType])){ - $sValue=$this->chartSWF[$this->chartType][1]; - }else{ - $sValue=1; - } - $this->seriesType=$sValue; - } - - #this function returns a color from a list of colors - function getColor($counter){ - - $strColor=""; - if ($this->UserColorON == false){ - $strColor=$this->arr_FCColors[$counter % count($this->arr_FCColors)]; - }else{ - $strColor=$this->UserColor[$counter % count($this->UserColor)]; - } - - return $strColor; - } - - # Clear User Color - function ClearUserColor() - { - $this->UserColorON = false; - } - - # add User Colors - function addColors($ColorList) - { - $listArray=explode($this->del, $ColorList); - $this->UserColorON = true; - foreach ($listArray as $valueArray) { - $this->UserColor[$this->userColorCounter]=$valueArray; - $this->userColorCounter++; - } - } - - ### ----- Pupulate Color and Chart SWF array ------ ------- --------------------- - function colorInit(){ - $this->arr_FCColors[] = "AFD8F8"; - $this->arr_FCColors[] = "F6BD0F"; - $this->arr_FCColors[] = "8BBA00"; - $this->arr_FCColors[] = "FF8E46"; - $this->arr_FCColors[] = "008E8E"; - $this->arr_FCColors[] = "D64646"; - $this->arr_FCColors[] = "8E468E"; - $this->arr_FCColors[] = "588526"; - $this->arr_FCColors[] = "B3AA00"; - $this->arr_FCColors[] = "008ED6"; - $this->arr_FCColors[] = "9D080D"; - $this->arr_FCColors[] = "A186BE"; - $this->arr_FCColors[] = "CC6600"; - $this->arr_FCColors[] = "FDC689"; - $this->arr_FCColors[] = "ABA000"; - $this->arr_FCColors[] = "F26D7D"; - $this->arr_FCColors[] = "FFF200"; - $this->arr_FCColors[] = "0054A6"; - $this->arr_FCColors[] = "F7941C"; - $this->arr_FCColors[] = "CC3300"; - $this->arr_FCColors[] = "006600"; - $this->arr_FCColors[] = "663300"; - $this->arr_FCColors[] = "6DCFF6"; - - } - - - - # Setting FusionCharts SWF file array list and series - function setChartArrays(){ - - $this->chartSWF['area2d'][0]="Area2D"; - $this->chartSWF['area2d'][1]=1; - $this->chartSWF['bar2d'][0]="Bar2D"; - $this->chartSWF['bar2d'][1]=1; - $this->chartSWF['column2d'][0]="Column2D"; - $this->chartSWF['column2d'][1]=1; - $this->chartSWF['column3d'][0]="Column3D"; - $this->chartSWF['column3d'][1]=1; - $this->chartSWF['doughnut2d'][0]="Doughnut2D"; - $this->chartSWF['doughnut2d'][1]=1; - $this->chartSWF['doughnut3d'][0]="Doughnut3D"; - $this->chartSWF['doughnut3d'][1]=1; - $this->chartSWF['line'][0]="Line"; - $this->chartSWF['line'][1]=1; - $this->chartSWF['pie2d'][0]="Pie2D"; - $this->chartSWF['pie2d'][1]=1; - $this->chartSWF['pie3d'][0]="Pie3D"; - $this->chartSWF['pie3d'][1]=1; - $this->chartSWF['funnel'][0]="Funnel"; - $this->chartSWF['funnel'][1]=1; - - $this->chartSWF['msarea'][0]="MSArea"; - $this->chartSWF['msarea'][1]=2; - $this->chartSWF['msarea2d'][0]="MSArea2D"; - $this->chartSWF['msarea2d'][1]=2; - $this->chartSWF['msbar2d'][0]="MSBar2D"; - $this->chartSWF['msbar2d'][1]=2; - $this->chartSWF['mscolumn2d'][0]="MSColumn2D"; - $this->chartSWF['mscolumn2d'][1]=2; - $this->chartSWF['mscolumn3d'][0]="MSColumn3D"; - $this->chartSWF['mscolumn3d'][1]=2; - $this->chartSWF['mscolumn3dlinedy'][0]="MSColumn3DLineDY"; - $this->chartSWF['mscolumn3dlinedy'][1]=2; - $this->chartSWF['mscolumnLine3D'][0]="MSColumnLine3D"; - $this->chartSWF['mscolumnLine3D'][1]=2; - $this->chartSWF['mscombi2d'][0]="MSCombi2D"; - $this->chartSWF['mscombi2d'][1]=2; - $this->chartSWF['mscombidy2d'][0]="MSCombiDY2D"; - $this->chartSWF['mscombidy2d'][1]=2; - $this->chartSWF['msline'][0]="MSLine"; - $this->chartSWF['msline'][1]=2; - $this->chartSWF['scrollarea2d'][0]="ScrollArea2D"; - $this->chartSWF['scrollarea2d'][1]=2; - $this->chartSWF['scrollcolumn2d'][0]="ScrollColumn2D"; - $this->chartSWF['scrollcolumn2d'][1]=2; - $this->chartSWF['scrollcombi2d'][0]="ScrollCombi2D"; - $this->chartSWF['scrollcombi2d'][1]=2; - $this->chartSWF['scrollcombidy2d'][0]="ScrollCombiDY2D"; - $this->chartSWF['scrollcombidy2d'][1]=2; - $this->chartSWF['scrollline2d'][0]="ScrollLine2D"; - $this->chartSWF['scrollline2d'][1]=2; - $this->chartSWF['scrollstackedcolumn2d'][0]="ScrollStackedColumn2D"; - $this->chartSWF['scrollstackedcolumn2d'][1]=2; - $this->chartSWF['stackedarea2d'][0]="StackedArea2D"; - $this->chartSWF['stackedarea2d'][1]=2; - $this->chartSWF['stackedbar2d'][0]="StackedBar2D"; - $this->chartSWF['stackedbar2d'][1]=2; - $this->chartSWF['stackedbar3d'][0]="StackedBar3D"; - $this->chartSWF['stackedbar3d'][1]=2; - $this->chartSWF['stackedcolumn2d'][0]="StackedColumn2D"; - $this->chartSWF['stackedcolumn2d'][1]=2; - $this->chartSWF['stackedcolumn3d'][0]="StackedColumn3D"; - $this->chartSWF['stackedcolumn3d'][1]=2; - $this->chartSWF['stackedcolumn3dlinedy'][0]="StackedColumn3DLineDY"; - $this->chartSWF['stackedcolumn3dlinedy'][1]=2; - $this->chartSWF['mscolumn2dlinedy'][0]="MSColumn2DLineDY"; - $this->chartSWF['mscolumn2dlinedy'][1]=2; - - - $this->chartSWF['bubble'][0]="Bubble"; - $this->chartSWF['bubble'][1]=3; - $this->chartSWF['scatter'][0]="Scatter"; - $this->chartSWF['scatter'][1]=3; - - $this->chartSWF['msstackedcolumn2dlinedy'][0]="MSStackedColumn2DLineDY"; - $this->chartSWF['msstackedcolumn2dlinedy'][1]=4; - $this->chartSWF['msstackedcolumn2d'][0]="MSStackedColumn2D"; - $this->chartSWF['msstackedcolumn2d'][1]=2; - - $this->chartSWF['gantt'][0]="Gantt"; - $this->chartSWF['gantt'][1]=5; - } - - ####################### GANTT CHART (start) ###################################### - # ----------- Public Functions ----------------------------------------------- - - # Function addCategory adding Category and vLine element - function addGanttCategorySet($catParam=""){ - $this->GT_categories_Counter++; - $this->GT_categories[$this->GT_categories_Counter]= array(); - $strParam=""; - - # cheking catParam not blank - if($catParam!=""){ - - $strParam = $this->ConvertParamToXMLAttribute($catParam); - - } - - $this->GT_categoriesParam[$this->GT_categories_Counter]=$strParam; - } - # Function addGanttCategory adding Category - function addGanttCategory($label="",$catParam=""){ - - $strCatXML=""; - $strParam=""; - - # cheking catParam not blank - if($catParam!=""){ - $strParam = $this->ConvertParamToXMLAttribute($catParam); - - } - # adding label and parameter set to category - $strCatXML =""; - - # storing into GT_categories array - $this->GT_categories[$this->GT_categories_Counter][$this->GT_subcategories_Counter]=$strCatXML; - # Increase Counter - $this->GT_subcategories_Counter++; - } - - # Setting Process Parameter into categoriesParam variables - function setGanttProcessesParams($strParam){ - - $this->GT_processes_Param .= $this->ConvertParamToXMLAttribute($strParam); - - } - - # Function addGanttProcess adding Process - function addGanttProcess($label="",$catParam=""){ - - $strCatXML=""; - $strParam=""; - - # cheking catParam not blank - if($catParam!=""){ - - $strParam = $this->ConvertParamToXMLAttribute($catParam); - - } - # adding label and parameter set to category - $strCatXML =""; - - # storing into categoryNames array - $this->GT_processes[$this->GT_processes_Counter]=$strCatXML; - # Increase Counter - $this->GT_processes_Counter++; - } - - - - # Setting Tasks Parameter into TaskParam variables - function setGanttTasksParams($strParam){ - - $this->GT_Tasks_Param .= $this->ConvertParamToXMLAttribute($strParam); - - } - - # Function addGanttTasks adding Tasks - function addGanttTask($label="",$catParam=""){ - - $strCatXML=""; - $strParam=""; - - # cheking catParam not blank - if($catParam!=""){ - - $strParam = $this->ConvertParamToXMLAttribute($catParam); - - } - # adding label and parameter set to category - $strCatXML =""; - - # storing into GT_Tasks array - $this->GT_Tasks[$this->GT_Tasks_Counter]=$strCatXML; - # Increase Counter - $this->GT_Tasks_Counter++; - } - - - - # Setting Tasks Parameter into ConnectorsParam variables - function setGanttConnectorsParams($strParam){ - $this->GT_Connectors_Param .= $this->ConvertParamToXMLAttribute($strParam); - - } - - # Function addGanttConnector adding Connector - function addGanttConnector($From,$To,$catParam=""){ - - $strCatXML=""; - $strParam=""; - - # cheking catParam not blank - if($catParam!=""){ - $strParam = $this->ConvertParamToXMLAttribute($catParam); - - } - # adding label and parameter set to category - $strCatXML =""; - - # storing into GT_Connectors array - $this->GT_Connectors[$this->GT_Connectors_Counter]=$strCatXML; - # Increase Counter - $this->GT_Connectors_Counter++; - } - - - - # Setting Milestones Parameter into MilestonesParam variables - function setGanttMilestonesParams($strParam){ - $this->GT_Milestones_Param .= $this->ConvertParamToXMLAttribute($strParam); - - } - - # Function addGanttMilestones adding Milestones - function addGanttMilestone($taskID,$catParam=""){ - - $strCatXML=""; - $strParam=""; - - # cheking catParam not blank - if($catParam!=""){ - $strParam = $this->ConvertParamToXMLAttribute($catParam); - - } - # adding label and parameter set to Milestones - $strCatXML =""; - - # storing into GT_Milestones array - $this->GT_Milestones[$this->GT_Milestones_Counter]=$strCatXML; - # Increase Counter - $this->GT_Milestones_Counter++; - } - - - - # Setting Legend Parameter into LegendParam variables - function setGanttLegendParams($strParam){ - - $this->GT_legend_Param .= $this->ConvertParamToXMLAttribute($strParam); - - } - - # Function addGanttLegendItem adding LegendItem - function addGanttLegendItem($label,$catParam=""){ - - $strCatXML=""; - $strParam=""; - - # cheking catParam not blank - if($catParam!=""){ - - $strParam = $this->ConvertParamToXMLAttribute($catParam); - - } - # adding label and parameter set to LegendItem - $strCatXML =""; - - # storing into GT_legend array - $this->GT_legend[$this->GT_legend_Counter]=$strCatXML; - # Increase Counter - $this->GT_legend_Counter++; - } - - - # Setting Datatable Parameter into DatatableParam variables - function setGanttDatatableParams($strParam){ - - $this->GT_datatableParam .= $this->ConvertParamToXMLAttribute($strParam); - - } - - # Function addGanttDatacolumn adding Datacolumn - function addGanttDatacolumn($catParam=""){ - $this->GT_datatable_Counter++; - $this->GT_datatable[$this->GT_datatable_Counter]= array(); - $strParam=""; - - # cheking catParam not blank - if($catParam!=""){ - $strParam = $this->ConvertParamToXMLAttribute($catParam); - } - - $this->GT_dataColumnParam[$this->GT_datatable_Counter]=$strParam; - } - # Function addGanttColumnText adding ColumnText - function addGanttColumnText($label="",$catParam=""){ - - $strCatXML=""; - $strParam=""; - - # cheking catParam not blank - if($catParam!=""){ - $strParam = $this->ConvertParamToXMLAttribute($catParam); - } - # adding label and parameter set to category - $strCatXML =""; - - # storing into GT_datatable array - $this->GT_datatable[$this->GT_datatable_Counter][$this->GT_subdatatable_Counter]=$strCatXML; - # Increase Counter - $this->GT_subdatatable_Counter++; - } - - ### ------------- Gantt Private Functoins ---------------------------------------------------------------------- - - #-- Gantt array init ------------------------------------------------ - # Function createCategory create array element with in Categories - function createGanttCategory($catID){ - $this->GT_categories[$catID]= array(); - } - # Function createGanttDatatable create array element with in Datatable - function createGanttDatatable($catID){ - $this->GT_datatable[$catID]= array(); - } - - - #-- GANTT XML genetators ------------------------------------------- - - # Function getCategoriesXML for getting Category part XML - function getGanttCategoriesXML(){ - $partXML=""; - foreach($this->GT_categories as $part_type => $part_name){ - # adding categories parameter - $partXML .="GT_categoriesParam[$part_type] . " >"; - foreach($this->GT_categories[$part_type] as $part_type1 => $part_name1){ - if($part_name1!=""){ - # adding elements - $partXML .= $part_name1; - } - } - # Closing - $partXML .=""; - } - - return $partXML; - } - - # Function getProcessesXML for getting Processes part XML - function getProcessesXML(){ - - $partXML=""; - # adding processes parameter - $partXML="GT_processes_Param . " >"; - foreach($this->GT_processes as $part_type => $part_name){ - if($part_name!=""){ - # adding elements - - $partXML .= $part_name; - - } - } - - # Closing - $partXML .=""; - return $partXML; - } - - - # Function getProcessesXML for getting Processes part XML - function getTasksXML(){ - - $partXML=""; - # adding processes parameter - $partXML="GT_Tasks_Param . " >"; - foreach($this->GT_Tasks as $part_type => $part_name){ - if($part_name!=""){ - # adding elements - - $partXML .= $part_name; - - } - } - - # Closing - $partXML .=""; - return $partXML; - } - - - # Function getConnectorsXML for getting Connectors part XML - function getConnectorsXML(){ - $c=0; - $partXML=""; - # adding connectors parameter - $partXML="GT_Connectors_Param . " >"; - foreach($this->GT_Connectors as $part_type => $part_name){ - if($part_name!=""){ - # adding elements - - $partXML .= $part_name; - $c++; - } - } - - # Closing - $partXML .=""; - if ($c>0){ - return $partXML; - }else{ - return ""; - } - } - - # Function getMilestonesXML for getting Milestones part XML - function getMilestonesXML(){ - $c=0; - $partXML=""; - # adding Milestones parameter - $partXML="GT_Milestones_Param . " >"; - foreach($this->GT_Milestones as $part_type => $part_name){ - if($part_name!=""){ - # adding elements - $partXML .= $part_name; - $c++; - } - } - - # Closing - $partXML .=""; - if ($c>0) { - return $partXML; - }else{ - return ""; - } - } - - - # Function getLegendXML for getting Legend part XML - function getLegendXML(){ - $c=0; - $partXML=""; - # adding Legend parameter - $partXML="GT_legend_Param . " >"; - foreach($this->GT_legend as $part_type => $part_name){ - if($part_name!=""){ - # adding elements - $partXML .= $part_name; - $c++; - } - } - - # Closing - $partXML .=""; - if ($c>0) { - return $partXML; - }else{ - return ""; - } - } - - - # Function getGanttDatatableXML for getting Category part XML - function getGanttDatatableXML(){ - $partXML=""; - foreach($this->GT_datatable as $part_type => $part_name){ - # adding dataColumn parameter - $partXML .="GT_dataColumnParam[$part_type] . " >"; - foreach($this->GT_datatable[$part_type] as $part_type1 => $part_name1){ - if($part_name1!=""){ - # adding elements - $partXML .= $part_name1; - } - } - # Closing - $partXML .=""; - } - $allPart="GT_datatableParam . " >" . $partXML . ""; - return $allPart; - } - - - - ####################### GANTT CHART (end) ###################################### - - - - #====================== For Future Use (start) ===================================== - - ##---------PUBLIC functions ---------------------------------------------------- - # adding Lineset array and parameter to it - function addLineset($seriesName, $strParam){ - $this->createLineset(); - $this->lineSetCounter++; - $this->lineSet[$this->lineCounter][$this->lineSetCounter]= array(); - - $tempParam=""; - $tempParam ="seriesName='" . $seriesName . "' "; - - $tempParam .= $this->ConvertParamToXMLAttribute($strParam); - - $this->lineIDCounter++; - # setting lineSetParam array with Parameter set - $this->lineSetParam [$this->lineSetCounter]=$tempParam; - - - } - - # adding Line's Set data - function addLinesetData($value="",$setParam="",$vlineParam = "" ){ - $strSetXML=""; - # getting parameter set - $strSetXML=$this->setSSMSDataArray($value,$setParam,$vlineParam); - - # setting paramter to lineSet array - $this->lineSet[$this->lineCounter][$this->lineSetCounter][$this->lineIDCounter]=$strSetXML; - - # Increase lineIDCounter - $this->lineIDCounter++; - } - - - # adding ms dataset and parameter - function addMSSSubDataset($seriesName, $strParam){ - $this->MSSSubDatasetCounter++; - $this->MSSDataset[$this->MSSDatasetCounter][$this->MSSSubDatasetCounter]= array(); - - $tempParam=""; - # creating seriesName - $tempParam ="seriesName='" . $seriesName . "' "; - $tempParam .= $this->ConvertParamToXMLAttribute($strParam); - - $this->MSSSetCounter++; - - # adding Parameter to MSSDatasetParams array - $this->MSSDatasetParams[$this->MSSDatasetCounter][$this->MSSSubDatasetCounter]=$tempParam; - - - } - - # adding set element to dataset element for seriesType 3 - function setScatterBubbleDataArray($value="",$setParam="",$vlineParam = "" ){ - $strSetXML=""; - $strParam=""; - if($vlineParam==""){ - if($setParam!=""){ - $strParam = $this->ConvertParamToXMLAttribute($setParam); - - } - # adding Parameter into set elements - $strSetXML =""; - - }else{ - # Parameter for vLine - $strParam = $this->ConvertParamToXMLAttribute($vlineParam); - - # adding vLine element - $strSetXML=""; - } - return $strSetXML; - } - - - # setvTLine create TrendLine parameter - function setVTrendLines($strParam){ - $listArray=explode($this->del,$strParam); - foreach ($listArray as $valueArray) { - $paramValue=explode("=",$valueArray,2); - if($this->validateParam($paramValue)==true){ - $this->vtrendLines[$this->vtLineCounter][$paramValue[0]]=$this->encodeSpecialChars($paramValue[1]); - } - } - $this->vtLineCounter++; - } - - - # setSubStylesParam create sub styles array to store parameters - function addStyleDef($styleName,$styleType,$strParam){ - $this->styles["definition"]["style"][$this->styleDefCounter]["name"]= $styleName; - $this->styles["definition"]["style"][$this->styleDefCounter]["type"]= $styleType; - - $listArray=explode($this->del,$strParam); - foreach ($listArray as $valueArray) { - $paramValue=explode("=",$valueArray,2); - if($this->validateParam($paramValue)==true){ - $this->styles["definition"]["style"][$this->styleDefCounter][$paramValue[0]]= $this->encodeSpecialChars($paramValue[1]); - } - } - $this->styleDefCounter++; - - } - # apply styles - function addStyleApp($toObject,$styles){ - $this->styles["application"]["apply"][$this->styleAppCounter]["toObject"]= $toObject; - $this->styles["application"]["apply"][$this->styleAppCounter]["styles"]= $styles; - - $this->styleAppCounter++; - } - - - ##---------PRIVATE functions ---------------------------------------------------- - - ## - -- - - XML generators - - - - ---- - -- - - - - - # Function getLinesetXML for getting Lineset XML - function getLinesetXML(){ - # if seriesType MSStackedColumn2DLineDY (4) then linset element will be Generate - if($this->seriesType==4){ - $partXML=""; - # Fetching lineSet array and Generating lineset xml element - foreach($this->lineSet as $part_type => $part_name){ - $partXML .= "lineSetParam[$part_type] . " >"; - foreach($this->lineSet[$part_type] as $part_type1 => $part_name1){ - foreach($this->lineSet[$part_type][$part_type1] as $part_type2 => $part_name2){ - if ($part_type2!=""){ - $partXML .= $part_name2; - } - } - } - $partXML .= ""; - } - return $partXML; - } - } - - # Function getMSStackedDatasetXML for getting datset part XML from ms stacked chart dataset array - # - # - # - # - # - # - - function getMSStackedDatasetXML(){ - if($this->seriesType==4){ - $partXML=""; - - foreach($this->MSSDataset as $part_type => $part_name){ - $partXML .= ""; - foreach($this->MSSDataset[$part_type] as $part_type1 => $part_name1){ - $partXML .= "MSSDatasetParams[$part_type][$part_type1] . " >"; - foreach($this->MSSDataset[$part_type][$part_type1] as $part_type2 => $part_name2){ - if ($part_type2!=""){ - $partXML .= $part_name2; - } - } - $partXML .= ""; - } - $partXML .= ""; - } - - return $partXML; - } - } - - - - - # getvTrendLinesXML create XML output depending on trendLines array - # - # - # - function getvTrendLinesXML(){ - $partXML=""; - $lineXML=""; - # fetching vtrendLines array - foreach($this->vtrendLines as $l_type => $l_name){ - # staring line element - $lineXML .="vtrendLines[$l_type] as $part_type => $part_name){ - $lineXML .= $part_type . "='" . $this->encodeSpecialChars($part_name) . "' "; - } - # close line element - $lineXML .=" />"; - } - # if line element present then adding $lineXML with in vtrendLines element - $pos = strpos($lineXML, "="); - if ($pos !== false) { - $partXML = "" . $lineXML . ""; - }else{ - # return nothing - $partXML=""; - } - # return vtrendLines xml - return $partXML; - } - # getStylesXML create the styles XML from styles array - /* - - -