This repository was archived by the owner on Apr 18, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathFormManager.js
More file actions
166 lines (143 loc) · 5.64 KB
/
FormManager.js
File metadata and controls
166 lines (143 loc) · 5.64 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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
function buildForm() {
var scriptProperties = PropertiesService.getScriptProperties();
//Creates the form with all of the correct settings.
//var userProperties = PropertiesService.getUserProperties();
var form = FormApp.create("Ennouncements");
form.setTitle("Ennouncements")
.setAcceptingResponses(true)
.setCollectEmail(true)
.setShowLinkToRespondAgain(true)
.setLimitOneResponsePerUser(false)
.setDescription("Please submit your E-announcement for approval here.\n\
Messages that are approved will be printed as-is, so please proofread them before sending.\n\
Messages should be sent by Fridays at 3:15 PM.");
//Add sample image.
var img = DriveApp.getFileById('172r0YeajO3HRzy5Do-KK_lqPybFO7KPC');
form.addImageItem()
.setTitle("Sample Ennouncement")
.setImage(img.getBlob())
.setAlignment(FormApp.Alignment.CENTER);
//Categories
var category = form.addListItem();
category.setTitle("Category")
.setHelpText("Priority and Office is for use of office staff only.")
.setChoices([
category.createChoice("Priority"),
category.createChoice("Office"),
category.createChoice("Events"),
category.createChoice("Clubs"),
category.createChoice("Other")])
.setRequired(true);
//Title
var textValidation = FormApp.createTextValidation()
.requireTextLengthLessThanOrEqualTo(50)
.setHelpText("Title must 50 characters or less.")
.build();
form.addTextItem()
.setTitle("Announcement Title")
.setHelpText("What would you like the title of your announcement to be? (50 characters or less)")
.setValidation(textValidation)
.setRequired(true);
//Body Text
//Formatting Tutorial
form.addSectionHeaderItem()
.setTitle("Announcement Text")
.setHelpText("You can now format your text for emphasis by wrapping parts of your message in certain characters.\n\
*text* = italic text\n\
**text** = bold text\n\
__text__ = underline text\n\
\n\
Learn more here: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet");
//Announcement Text"
var textValidation = FormApp.createParagraphTextValidation()
.requireTextLengthLessThanOrEqualTo(500)
.setHelpText("Messages must be 500 characters or less.")
.build();
form.addParagraphTextItem().setTitle("Announcement Text")
.setHelpText("The content of your announcement. (500 characters or less) Need to shorten a link? Use https://goo.gl/ or https://bit.ly/")
.setValidation(textValidation)
.setRequired(true);
//End Date
form.addDateItem()
.setHelpText("(OPTIONAL) If this is a multi-week announcement, please enter the LAST DAY it is applicable to. Leaving this blank = one-time announcement. Except in special cases, please be courteous and do not keep an ennouncement running for more than a month.")
.setTitle("End Date");
//Contact Email
var textValidation = FormApp
.createTextValidation()
.requireTextIsEmail()
.setHelpText("Not a valid E - mail address.")
.build();
form.addTextItem()
.setHelpText("(OPTIONAL) If you want to include a contact email after your message.")
.setTitle("Contact Email")
.setValidation(textValidation);
form.setAcceptingResponses(true)
scriptProperties.setProperty('ennouncementFormId', form.getId());
Logger.log(form.getPublishedUrl());
return form;
}
function getSavedFormId() {
//Returns the saved formId in the ScriptProperties
var scriptProperties = PropertiesService.getScriptProperties();
return scriptProperties.getProperty('ennouncementFormId');
}
function linkFormToSheet() {
//Check if a form is already saved and links it. Else it creates a new one.
//Returns the final sheet.
var scriptProperties = PropertiesService.getScriptProperties();
var ss = SpreadsheetApp.getActiveSpreadsheet();
if (!ss.getFormUrl() && scriptProperties.getProperty('ennouncementFormId')) {
linkSavedForm()
}
else {
linkNewForm()
}
var responseSheet = renameResponseSheet();
ss.setActiveSheet(responseSheet);
return responseSheet;
}
function linkNewForm() {
var scriptProperties = PropertiesService.getScriptProperties();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var form = buildForm();
scriptProperties.setProperty('ennouncementFormId', form.getId());
return form.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());
}
function linkSavedForm() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var form = FormApp.openById(getSavedFormId());
return form.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());
}
function renameResponseSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
for (i = 0; i < sheets.length; i++) {
var name = sheets[i].getName();
if (name.indexOf("Form Responses") == 0) {
break;
}
}
return sheets[i].setName("Ennouncements");
}
function lockForm() {
if (isAutoLockFormEnabled()) {
var form = FormApp.openById(getSavedFormId());
form.setCustomClosedFormMessage("The ennouncement form has been closed for this week. Please wait until next week to submit your ennouncement. \n Ennouncements are due by 3:15pm the week before.");
form.setAcceptingResponses(false);
}
}
function unlockForm() {
if (isAutoLockFormEnabled()) {
var form = FormApp.openById(getSavedFormId());
form.setAcceptingResponses(true);
}
}
function unlinkFormAndDeleteAll() {
var form = FormApp.openById(getSavedFormId());
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Ennouncements");
form.removeDestination();
form.deleteAllResponses();
var TODAY = new Date();
sheet.setName("Archive " + TODAY.toString());
}