Created
August 10, 2023 15:14
-
-
Save coderbyheart/32c029fa8684b6c6c776411d98146aa8 to your computer and use it in GitHub Desktop.
Codefreeze registration form
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
var POST_URL = "https://api.github.com/repos/codefreezefi/codefreeze.fi/issues"; | |
var GH_TOKEN = 'ghp_XXX'; // should have public_repo permission | |
function parseResponses(responses) { | |
var items = []; | |
for (var i = 0; i < responses.length; i++) { | |
var response = responses[i]; | |
var question = response.question; | |
var answer = response.answer; | |
var parts; | |
try { | |
parts = answer.match(/[\s\S]{1,1024}/g) || []; | |
} catch (e) { | |
parts = []; | |
} | |
if (answer === "") { | |
continue; | |
} | |
for (var j = 0; j < parts.length; j++) { | |
if (j === 0) { | |
items.push({ | |
"name": question, | |
"value": parts[j] | |
}); | |
} else { | |
items.push({ | |
"name": question.concat(" (cont.)"), | |
"value": parts[j] | |
}); | |
} | |
} | |
} | |
return items; | |
} | |
var titleMap = { | |
"Your Name/Nickname": "name", | |
"Your pronouns": "pronouns", | |
"Photo URL": "image", | |
"Twitter Profile URL": "twitter", | |
"LinkedIn Profile URL": "linkedin", | |
"Homepage URL": "link" | |
} | |
function onSubmit(e) { | |
var form = FormApp.getActiveForm(); | |
var allResponses = form.getResponses(); | |
var latestResponse = allResponses[allResponses.length - 1]; | |
var items = parseResponses(latestResponse.getItemResponses().reduce(function (responses, response) { | |
responses[titleMap[response.getItem().getTitle()]] = response.getResponse() | |
return responses | |
}, {})); | |
var responses = parseResponses(latestResponse.getItemResponses().map(function (response) { | |
return { | |
question: response.getItem().getTitle(), | |
answer: response.getResponse(), | |
} | |
})); | |
console.log({responses: responses}) | |
var items = responses.reduce(function (responses, response) { | |
responses[titleMap[response.name]] = response.value | |
return responses | |
}, {}); | |
console.log({items: items}) | |
var payload = JSON.stringify({ | |
"title": "Registration for " + items.name, | |
"body": "This issue has been created automatically on behalf of " + items.name + "\n\n```json\n" | |
+ JSON.stringify(items) | |
+ "\n```" | |
}) | |
var options = { | |
"method": "POST", | |
"headers": { | |
"Content-Type": "application/json; charset=utf-8", | |
"Authorization": "token " + GH_TOKEN | |
}, | |
contentLength: payload.length, | |
muteHttpExceptions:false, | |
"payload": payload | |
}; | |
console.log(JSON.stringify({ | |
url: POST_URL, | |
options: options | |
}, null, 2)) | |
UrlFetchApp.fetch(POST_URL, options); | |
} | |
if (typeof exports !== 'undefined') { | |
exports.parseResponses = parseResponses; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment