-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCheckForm.gs
More file actions
79 lines (65 loc) · 2.42 KB
/
Copy pathCheckForm.gs
File metadata and controls
79 lines (65 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
START_TIME = "2014-01-01 08:00";
CLOSE_TIME = "2014-11-20 20:30";
MAX_RESPONSES = "200";
MAX_ATTENDEES = "200";
/* Initialize the form, setup triggers */
function Initialize() {
deleteTriggers_();
if ((START_TIME !== "") &&
((new Date()).getTime() < parseDate_(START_TIME).getTime())) {
closeForm();
ScriptApp.newTrigger("openForm").timeBased().at(parseDate_(START_TIME)).create();
}
if (CLOSE_TIME !== "") {
ScriptApp.newTrigger("closeForm").timeBased().at(parseDate_(CLOSE_TIME)).create();
}
if ( (MAX_RESPONSES !== "") || (MAX_ATTENDEES !== "") ) {
ScriptApp.newTrigger("checkLimit").forForm(FormApp.getActiveForm()).onFormSubmit().create();
}
}
/* Delete any existing Triggers */
function deleteTriggers_() {
var triggers = ScriptApp.getScriptTriggers();
for (var i in triggers) {
ScriptApp.deleteTrigger(triggers[i]);
}
}
/* Send an email to the owner when the form is opened or closed */
function informUser_(subject) {
var formURL = FormApp.getActiveForm().getPublishedUrl();
MailApp.sendEmail(Session.getActiveUser().getEmail(), subject, formURL);
}
/* Open form to accept responses */
function openForm() {
var form = FormApp.getActiveForm();
form.setAcceptingResponses(true);
informUser_("Your Google Form is now accepting responses");
}
/* Close form from accepting reponses */
function closeForm() {
var form = FormApp.getActiveForm();
form.setAcceptingResponses(false);
deleteTriggers_();
informUser_("Your Google Form is no longer accepting responses");
}
/* If total number of responses >= limit, Close form */
function checkLimit() {
var responses = FormApp.getActiveForm().getResponses();
var count = 0;
Logger.log('responses = %s ', responses.length );
for ( var i = 0; i < responses.length; i++) {
var itemResponses = responses[i].getItemResponses();
// HARD CODING: UGLY! TIMESTAMP is ignored, it seems.
var attendees = Number( itemResponses[3].getResponse() );
count += attendees;
Logger.log('At %s, found response %s', i, attendees );
}
Logger.log('Counted %s attendees', count );
if ( ( FormApp.getActiveForm().getResponses().length >= MAX_RESPONSES ) || ( count >= MAX_ATTENDEES ) ) {
closeForm();
}
}
/* Parse the date/time for creating time triggers */
function parseDate_(d) {
return new Date(d.substr(0,4), d.substr(5,2)-1, d.substr(8,2), d.substr(11,2), d.substr(14,2));
}