function formatMailBody(obj,order) {
var result = "";
for (var idx in order) {
var key = order[idx];
result += "<h4 style='text-transform: capitalize; margin-bottom: 0'>" + key +
"</h4><div>" + sanitizeInput(obj[key]) + "</div>";
}
return result;
}
function sanitizeInput(rawInput) {
var placeholder = [Link](" ");
[Link](rawInput);
return [Link]();
}
function doPost(e) {
try {
[Link](e);
record_data(e);
var mailData = [Link];
var orderParameter = [Link];
var dataOrder;
if (orderParameter) {
dataOrder = [Link](orderParameter);
}
var sendEmailTo = (typeof TO_ADDRESS !== "undefined") ? TO_ADDRESS :
[Link];
if (sendEmailTo) {
[Link]({
to: String(sendEmailTo),
subject: "Contact form submitted",
htmlBody: formatMailBody(mailData, dataOrder)
});
}
return ContentService // return json success results
.createTextOutput(
[Link]({"result":"success",
"data": [Link]([Link]) }))
.setMimeType([Link]);
} catch(error) { // if error return this
[Link](error);
return ContentService
.createTextOutput([Link]({"result":"error", "error": error}))
.setMimeType([Link]);
}
}
function record_data(e) {
var lock = [Link]();
[Link](30000); // hold off up to 30 sec to avoid concurrent writing
try {
[Link]([Link](e)); // log the POST data in case we need to debug it
var doc = [Link]();
var sheetName = [Link] || "sheetname";
var sheet = [Link](sheetName);
var oldHeader = [Link](1, 1, 1, [Link]()).getValues()[0];
var newHeader = [Link]();
var fieldsFromForm = getDataColumns([Link]);
var row = [new Date()]; // first element in the row should always be a
timestamp
for (var i = 1; i < [Link]; i++) { // start at 1 to avoid Timestamp
column
var field = oldHeader[i];
var output = getFieldFromData(field, [Link]);
[Link](output);
var formIndex = [Link](field);
if (formIndex > -1) {
[Link](formIndex, 1);
}
}
for (var i = 0; i < [Link]; i++) {
var field = fieldsFromForm[i];
var output = getFieldFromData(field, [Link]);
[Link](output);
[Link](field);
}
var nextRow = [Link]() + 1; // get next row
[Link](nextRow, 1, 1, [Link]).setValues([row]);
if ([Link] > [Link]) {
[Link](1, 1, 1, [Link]).setValues([newHeader]);
}
}
catch(error) {
[Link](error);
}
finally {
[Link]();
return;
}
function getDataColumns(data) {
return [Link](data).filter(function(column) {
return !(column === 'formDataNameOrder' || column === 'formGoogleSheetName' ||
column === 'formGoogleSendEmail' || column === 'honeypot');
});
}
function getFieldFromData(field, data) {
var values = data[field] || '';
var output = [Link] ? [Link](', ') : values;
return output;
}