Skip to content

Instantly share code, notes, and snippets.

@coderofsalvation
Last active February 13, 2020 15:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save coderofsalvation/2a42961de1cbaa2da4cf96e97b2d48b9 to your computer and use it in GitHub Desktop.
Save coderofsalvation/2a42961de1cbaa2da4cf96e97b2d48b9 to your computer and use it in GitHub Desktop.
serialize google forms response-object with getFormItems()
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