Skip to content

Instantly share code, notes, and snippets.

@coderbyheart
Created August 10, 2023 15:14
Show Gist options
  • Save coderbyheart/32c029fa8684b6c6c776411d98146aa8 to your computer and use it in GitHub Desktop.
Save coderbyheart/32c029fa8684b6c6c776411d98146aa8 to your computer and use it in GitHub Desktop.
Codefreeze registration form
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