Merge branch 'ent-6658-Aparece-timestap-en-vez-de-timestamp-en-csv-exportado-de-graficas-y-faltan-labels' into 'develop'

fixed csv charts

See merge request artica/pandorafms!3582
This commit is contained in:
Daniel Rodriguez 2020-10-29 18:19:35 +01:00
commit 6161ba078f

View File

@ -1,425 +1,424 @@
(function ($) { (function($) {
var options = { var options = {
export: { export: {
export_data: false, // or true export_data: false, // or true
labels_long: null, labels_long: null,
homeurl: "", homeurl: ""
}, }
}; };
function init(plot) { function init(plot) {
plot.exportDataCSV = function (args) { plot.exportDataCSV = function(args) {
//amount = plot.getOptions().export.type, //amount = plot.getOptions().export.type,
//options = options || {}; //options = options || {};
// Options // Options
var type = "csv"; var type = "csv";
type = type.toLowerCase().trim(); type = type.toLowerCase().trim();
var graphData, var graphData,
dataObject, dataObject,
dataObjects = plot.getData(), dataObjects = plot.getData(),
result = []; result = [];
// Throw errors // Throw errors
var retrieveDataOject = function (dataObjects) { var retrieveDataOject = function(dataObjects) {
var result; var result;
if (typeof dataObjects === "undefined") if (typeof dataObjects === "undefined")
throw new Error("Empty parameter"); throw new Error("Empty parameter");
// Try to retrieve the avg set (not 100% reliable, I know) // Try to retrieve the avg set (not 100% reliable, I know)
if (dataObjects.length == 1) { if (dataObjects.length == 1) {
result = dataObjects.shift(); result = dataObjects.shift();
} }
if (dataObjects.length > 1) { if (dataObjects.length > 1) {
dataObjects.forEach(function (element) { dataObjects.forEach(function(element) {
if (/^Avg.:/i.test(element.label)) result = element; if (/^Avg.:/i.test(element.label)) result = element;
}); });
// If the avg set is missing, retrieve the first set // If the avg set is missing, retrieve the first set
if (typeof result === "undefined") result = dataObjects.shift(); if (typeof result === "undefined") result = dataObjects.shift();
} }
if (typeof result === "undefined") throw new Error("Empty result"); if (typeof result === "undefined") throw new Error("Empty result");
return result; return result;
}; };
// Throw errors // Throw errors
var processDataObject = function (dataObject) { var processDataObject = function(dataObject) {
var result; var result;
if (typeof dataObject === "undefined") if (typeof dataObject === "undefined")
throw new Error("Empty parameter"); throw new Error("Empty parameter");
if ( if (
typeof dataObject.data === "undefined" || typeof dataObject.data === "undefined" ||
!(dataObject.data instanceof Array) !(dataObject.data instanceof Array)
) )
throw new Error("Object malformed"); throw new Error("Object malformed");
/* { /* {
* head: [<column>,<column>,...,<column>], * head: [<column>,<column>,...,<column>],
* data: [ * data: [
* [<data>,<data>,...,<data>], * [<data>,<data>,...,<data>],
* [<data>,<data>,...,<data>], * [<data>,<data>,...,<data>],
* ..., * ...,
* [<data>,<data>,...,<data>], * [<data>,<data>,...,<data>],
* ] * ]
* } * }
*/ */
if (type === "csv") { if (type === "csv") {
result = { result = {
head: ["timestap", "date", "value", "label"], head: ["timestamp", "date", "value", "label"],
data: [], data: []
}; };
dataObject.data.forEach(function (item, index) { dataObject.data.forEach(function(item, index) {
var timestap = item[0]; var timestamp = item[0];
var d = new Date(item[0]); var d = new Date(item[0]);
var monthNames = [ var monthNames = [
"Jan", "Jan",
"Feb", "Feb",
"Mar", "Mar",
"Apr", "Apr",
"May", "May",
"Jun", "Jun",
"Jul", "Jul",
"Aug", "Aug",
"Sep", "Sep",
"Oct", "Oct",
"Nov", "Nov",
"Dec", "Dec"
]; ];
date_format = date_format =
(d.getDate() < 10 ? "0" : "") + (d.getDate() < 10 ? "0" : "") +
d.getDate() + d.getDate() +
" " + " " +
monthNames[d.getMonth()] + monthNames[d.getMonth()] +
" " + " " +
d.getFullYear() + d.getFullYear() +
" " + " " +
(d.getHours() < 10 ? "0" : "") + (d.getHours() < 10 ? "0" : "") +
d.getHours() + d.getHours() +
":" + ":" +
(d.getMinutes() < 10 ? "0" : "") + (d.getMinutes() < 10 ? "0" : "") +
d.getMinutes() + d.getMinutes() +
":" + ":" +
(d.getSeconds() < 10 ? "0" : "") + (d.getSeconds() < 10 ? "0" : "") +
d.getSeconds(); d.getSeconds();
var date = date_format; var date = date_format;
var value = item[1]; var value = item[1];
var clean_label = plot.getOptions().export.labels_long[ var clean_label = plot.getOptions().export.labels_long[
dataObject.label dataObject.label
]; ];
clean_label = clean_label.replace(new RegExp("&#x20;", "g"), " "); clean_label = clean_label.replace(new RegExp("&#x20;", "g"), " ");
result.data.push([timestap, date, value, clean_label]); result.data.push([timestamp, date, value, clean_label]);
}); });
} else if (type === "json") { } else if (type === "json") {
/* [ /* [
* { * {
* 'date': <date>, * 'date': <date>,
* 'value': <value> * 'value': <value>
* } * }
* ], * ],
* [ * [
* { * {
* 'date': <date>, * 'date': <date>,
* 'value': <value> * 'value': <value>
* } * }
* ], * ],
* ..., * ...,
* [ * [
* { * {
* 'date': <date>, * 'date': <date>,
* 'value': <value> * 'value': <value>
* } * }
* ] * ]
*/ */
result = []; result = [];
dataObject.data.forEach(function (item, index) { dataObject.data.forEach(function(item, index) {
var date = "", var date = "",
value = item[1]; value = item[1];
// Long labels are preferred // Long labels are preferred
if (typeof labels_long[index] !== "undefined") if (typeof labels_long[index] !== "undefined")
date = labels_long[index]; date = labels_long[index];
else if (typeof labels[index] !== "undefined") date = labels[index]; else if (typeof labels[index] !== "undefined") date = labels[index];
result.push({ result.push({
date: date, date: date,
value: value, value: value,
label: dataObject.label, label: dataObject.label
}); });
}); });
} }
if (typeof result === "undefined") throw new Error("Empty result"); if (typeof result === "undefined") throw new Error("Empty result");
return result; return result;
}; };
try { try {
var elements = []; var elements = [];
dataObject = retrieveDataOject(dataObjects); dataObject = retrieveDataOject(dataObjects);
if (dataObject) { if (dataObject) {
elements.push(processDataObject(dataObject)); elements.push(processDataObject(dataObject));
} }
dataObjects.forEach(function (element) { dataObjects.forEach(function(element) {
elements.push(processDataObject(element)); elements.push(processDataObject(element));
}); });
graphData = elements; graphData = elements;
// Transform the object data into a string
// cause PHP has limitations in the number
// of POST params received.
var graphDataStr = JSON.stringify(graphData);
// Transform the object data into a string // Build form
// cause PHP has limitations in the number var $form = $("<form></form>"),
// of POST params received. $dataInput = $("<input>"),
var graphDataStr = JSON.stringify(graphData); $typeInput = $("<input>"),
$separatorInput = $("<input>"),
$excelInput = $("<input>");
// Build form $dataInput
var $form = $("<form></form>"), .prop("name", "data")
$dataInput = $("<input>"), .prop("type", "text")
$typeInput = $("<input>"), .prop("value", graphDataStr);
$separatorInput = $("<input>"),
$excelInput = $("<input>");
$dataInput $typeInput
.prop("name", "data") .prop("name", "type")
.prop("type", "text") .prop("type", "text")
.prop("value", graphDataStr); .prop("value", type);
$typeInput $separatorInput
.prop("name", "type") .prop("name", "separator")
.prop("type", "text") .prop("type", "text")
.prop("value", type); .prop("value", ";");
$separatorInput $excelInput
.prop("name", "separator") .prop("name", "excel_encoding")
.prop("type", "text") .prop("type", "text")
.prop("value", ";"); .prop("value", 0);
$excelInput $form
.prop("name", "excel_encoding") .prop("method", "POST")
.prop("type", "text") .prop(
.prop("value", 0); "action",
plot.getOptions().export.homeurl + "include/graphs/export_data.php"
)
.append($dataInput, $typeInput, $separatorInput, $excelInput)
.hide()
// Firefox made me write into the DOM for this :(
.appendTo("body")
.submit();
} catch (e) {
alert("There was an error exporting the data");
}
};
$form plot.exportDataJSON = function(args) {
.prop("method", "POST") //amount = plot.getOptions().export.type,
.prop( //options = options || {};
"action",
plot.getOptions().export.homeurl + "include/graphs/export_data.php"
)
.append($dataInput, $typeInput, $separatorInput, $excelInput)
.hide()
// Firefox made me write into the DOM for this :(
.appendTo("body")
.submit();
} catch (e) {
alert("There was an error exporting the data");
}
};
plot.exportDataJSON = function (args) { // Options
//amount = plot.getOptions().export.type, var type = "json";
//options = options || {}; type = type.toLowerCase().trim();
// Options var graphData,
var type = "json"; dataObject,
type = type.toLowerCase().trim(); dataObjects = plot.getData(),
result = [];
var graphData, // Throw errors
dataObject, var retrieveDataOject = function(dataObjects) {
dataObjects = plot.getData(), var result;
result = [];
// Throw errors if (typeof dataObjects === "undefined")
var retrieveDataOject = function (dataObjects) { throw new Error("Empty parameter");
var result;
if (typeof dataObjects === "undefined") // Try to retrieve the avg set (not 100% reliable, I know)
throw new Error("Empty parameter"); if (dataObjects.length == 1) {
result = dataObjects.shift();
}
if (dataObjects.length > 1) {
dataObjects.forEach(function(element) {
if (/^Avg.:/i.test(element.label)) result = element;
});
// Try to retrieve the avg set (not 100% reliable, I know) // If the avg set is missing, retrieve the first set
if (dataObjects.length == 1) { if (typeof result === "undefined") result = dataObjects.shift();
result = dataObjects.shift(); }
}
if (dataObjects.length > 1) {
dataObjects.forEach(function (element) {
if (/^Avg.:/i.test(element.label)) result = element;
});
// If the avg set is missing, retrieve the first set if (typeof result === "undefined") throw new Error("Empty result");
if (typeof result === "undefined") result = dataObjects.shift();
}
if (typeof result === "undefined") throw new Error("Empty result"); return result;
};
return result; // Throw errors
}; var processDataObject = function(dataObject) {
var result;
// Throw errors if (typeof dataObject === "undefined")
var processDataObject = function (dataObject) { throw new Error("Empty parameter");
var result;
if (typeof dataObject === "undefined") if (
throw new Error("Empty parameter"); typeof dataObject.data === "undefined" ||
!(dataObject.data instanceof Array)
)
throw new Error("Object malformed");
if ( /* {
typeof dataObject.data === "undefined" || * head: [<column>,<column>,...,<column>],
!(dataObject.data instanceof Array) * data: [
) * [<data>,<data>,...,<data>],
throw new Error("Object malformed"); * [<data>,<data>,...,<data>],
* ...,
* [<data>,<data>,...,<data>],
* ]
* }
*/
if (type === "csv") {
result = {
head: ["date", "value", "label"],
data: []
};
/* { dataObject.data.forEach(function(item, index) {
* head: [<column>,<column>,...,<column>], var date = "",
* data: [ value = item[1];
* [<data>,<data>,...,<data>],
* [<data>,<data>,...,<data>],
* ...,
* [<data>,<data>,...,<data>],
* ]
* }
*/
if (type === "csv") {
result = {
head: ["date", "value", "label"],
data: [],
};
dataObject.data.forEach(function (item, index) { // Long labels are preferred
var date = "", if (
value = item[1]; typeof plot.getOptions().export.labels_long[index] !== "undefined"
)
date = plot.getOptions().export.labels_long[index];
else if (typeof labels[index] !== "undefined") date = labels[index];
// Long labels are preferred result.data.push([date, value, dataObject.label]);
if ( });
typeof plot.getOptions().export.labels_long[index] !== "undefined" } else if (type === "json") {
) /* [
date = plot.getOptions().export.labels_long[index]; * {
else if (typeof labels[index] !== "undefined") date = labels[index]; * 'date': <date>,
* 'value': <value>
* }
* ],
* [
* {
* 'date': <date>,
* 'value': <value>
* }
* ],
* ...,
* [
* {
* 'date': <date>,
* 'value': <value>
* }
* ]
*/
result = [];
result.data.push([date, value, dataObject.label]); dataObject.data.forEach(function(item, index) {
}); var date = "",
} else if (type === "json") { value = item[1];
/* [
* {
* 'date': <date>,
* 'value': <value>
* }
* ],
* [
* {
* 'date': <date>,
* 'value': <value>
* }
* ],
* ...,
* [
* {
* 'date': <date>,
* 'value': <value>
* }
* ]
*/
result = [];
dataObject.data.forEach(function (item, index) { // Long labels are preferred
var date = "", if (typeof labels_long[index] !== "undefined")
value = item[1]; date = labels_long[index];
else if (typeof labels[index] !== "undefined") date = labels[index];
// Long labels are preferred result.push({
if (typeof labels_long[index] !== "undefined") date: date,
date = labels_long[index]; value: value,
else if (typeof labels[index] !== "undefined") date = labels[index]; label: dataObject.label
});
});
}
result.push({ if (typeof result === "undefined") throw new Error("Empty result");
date: date,
value: value,
label: dataObject.label,
});
});
}
if (typeof result === "undefined") throw new Error("Empty result"); return result;
};
return result; try {
}; var elements = [];
var custom_graph = $("input:hidden[name=custom_graph]").value;
try { if (custom_graph) {
var elements = []; dataObject = retrieveDataOject(dataObjects);
var custom_graph = $("input:hidden[name=custom_graph]").value; dataObjects.forEach(function(element) {
elements.push(processDataObject(element));
});
graphData = elements;
} else {
dataObject = retrieveDataOject(dataObjects);
elements.push(processDataObject(dataObject));
graphData = elements;
}
if (custom_graph) { // Transform the object data into a string
dataObject = retrieveDataOject(dataObjects); // cause PHP has limitations in the number
dataObjects.forEach(function (element) { // of POST params received.
elements.push(processDataObject(element)); var graphDataStr = JSON.stringify(graphData);
});
graphData = elements;
} else {
dataObject = retrieveDataOject(dataObjects);
elements.push(processDataObject(dataObject));
graphData = elements;
}
// Transform the object data into a string // Build form
// cause PHP has limitations in the number var $form = $("<form></form>"),
// of POST params received. $dataInput = $("<input>"),
var graphDataStr = JSON.stringify(graphData); $typeInput = $("<input>"),
$separatorInput = $("<input>"),
$excelInput = $("<input>");
// Build form $dataInput
var $form = $("<form></form>"), .prop("name", "data")
$dataInput = $("<input>"), .prop("type", "text")
$typeInput = $("<input>"), .prop("value", graphDataStr);
$separatorInput = $("<input>"),
$excelInput = $("<input>");
$dataInput $typeInput
.prop("name", "data") .prop("name", "type")
.prop("type", "text") .prop("type", "text")
.prop("value", graphDataStr); .prop("value", type);
$typeInput $separatorInput
.prop("name", "type") .prop("name", "separator")
.prop("type", "text") .prop("type", "text")
.prop("value", type); .prop("value", ";");
$separatorInput $excelInput
.prop("name", "separator") .prop("name", "excel_encoding")
.prop("type", "text") .prop("type", "text")
.prop("value", ";"); .prop("value", 0);
$excelInput $form
.prop("name", "excel_encoding") .prop("method", "POST")
.prop("type", "text") .prop(
.prop("value", 0); "action",
plot.getOptions().export.homeurl + "include/graphs/export_data.php"
)
.append($dataInput, $typeInput, $separatorInput, $excelInput)
.hide()
// Firefox made me write into the DOM for this :(
.appendTo("body")
.submit();
} catch (e) {
alert("There was an error exporting the data");
}
};
}
$form $.plot.plugins.push({
.prop("method", "POST") init: init,
.prop( options: options,
"action", name: "exportdata",
plot.getOptions().export.homeurl + "include/graphs/export_data.php" version: "0.1"
) });
.append($dataInput, $typeInput, $separatorInput, $excelInput)
.hide()
// Firefox made me write into the DOM for this :(
.appendTo("body")
.submit();
} catch (e) {
alert("There was an error exporting the data");
}
};
}
$.plot.plugins.push({
init: init,
options: options,
name: "exportdata",
version: "0.1",
});
})(jQuery); })(jQuery);