Last active
February 13, 2020 15:18
-
-
Save coderofsalvation/2a42961de1cbaa2da4cf96e97b2d48b9 to your computer and use it in GitHub Desktop.
serialize google forms response-object with getFormItems()
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function onFormSubmit(e) { | |
emailResponse( getFormItems(e.response) ) | |
} | |
/** | |
* Sends out respondent notification emails. | |
* | |
* @param {FormResponse} response FormResponse | |
*/ | |
function updateTriggers() { | |
var form = FormApp.getActiveForm(); | |
var triggers = ScriptApp.getUserTriggers(form); | |
var settings = PropertiesService.getDocumentProperties(); | |
var triggerNeeded = true // change this based on settings in your UI e.g. | |
// Create a new trigger if required; delete existing trigger if not needed | |
var existingTrigger = null; | |
for (var i = 0; i < triggers.length; i++) { | |
if (triggers[i].getEventType() == ScriptApp.EventType.ON_FORM_SUBMIT) { | |
existingTrigger = triggers[i]; | |
break; | |
} | |
} | |
if (triggerNeeded && !existingTrigger) { | |
var trigger = ScriptApp.newTrigger('onFormSubmit') | |
.forForm(form) | |
.onFormSubmit() | |
.create(); | |
} else if (!triggerNeeded && existingTrigger) { | |
ScriptApp.deleteTrigger(existingTrigger); | |
} | |
} | |
/** | |
* Sends out respondent notification emails. | |
* | |
* @param {FormResponse} response FormResponse | |
*/ | |
function emailResponse(response) { | |
var form = FormApp.getActiveForm(); | |
var respondentEmail = response.getRespondentEmail() | |
if (respondentEmail) { | |
var template = HtmlService.createTemplateFromFile('email/RespondentNotification'); | |
template.notice = ''; | |
template.response = JSON.stringify( | |
getFormItems(response),null,2) | |
var message = template.evaluate(); | |
MailApp.sendEmail(respondentEmail, | |
"this is a subject", | |
message.getContent(), { | |
name: form.getTitle(), | |
htmlBody: message.getContent() | |
}); | |
}else console.error("no email found") | |
} | |
function getFormItems(response){ | |
var Form = FormApp.getActiveForm(); | |
var values = {} | |
var formItems = Form.getItems() | |
var getType = function(i){ | |
var types = ['CHECKBOX','CHECKBOX_GRID','DATE','DATETIME','DURATION','GRID','IMAGE','LIST','MULTIPLE_CHOICE','PARAGRAPH_TEXT','SCALE','SECTION_HEADER','TEXT','TIME','PAGE_BREAK'] | |
var res = 'UNKNOWN' | |
for(var j in types ) | |
if( i.getType() == FormApp.ItemType[types[j]] ) res = types[j] | |
return res | |
} | |
formItems.map( function(i){ | |
var o = {id: i.getId(), title: i.getTitle() ? i.getTitle() : undefined, type: getType(i),item: i} | |
if( response && response.getResponseForItem(i) ) o.response = response.getResponseForItem(i).getResponse() | |
values[ i.getTitle ? i.getTitle() : i.getId() ] = o | |
}) | |
return values | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment