-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinit.gs
222 lines (184 loc) · 10.8 KB
/
init.gs
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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
function init_external (category = "TEST",callname = now){ //callname is allocated to: "Draw!I26"
// CALLED ONLY from SOURCE.
if(PropertiesService.getDocumentProperties().getProperty('status') != 'SOURCE'){
Logger.log("Invalid Initialize Root.")
ui.alert("New Tournament Instances can only be created from SOURCE.");
return;}
Logger.log("NEW TOURNAMENT INITIALIZED : "+category+"-"+callname);
const ss_name = `[${category}-${callname}] Scoring System ${VERSION}`;
const mt_name = `[${category}-${callname}] Scores Master`;
var originFolder = DriveApp.getFolderById(PropertiesService.getDocumentProperties().getProperty('folderID_origin'))
var rootFolder = originFolder.createFolder(`[${category}-${callname}] Scoring System`);
var resultFolder = rootFolder.createFolder("RESULTS");
var templateFolder = rootFolder.createFolder("TEMPLATES");
var ssSpreadsheetFile = DriveApp.getFileById(PropertiesService.getDocumentProperties().getProperty('ssId')).makeCopy(ss_name,rootFolder);
var mtSpreadsheetFile = DriveApp.getFileById(PropertiesService.getDocumentProperties().getProperty('mtId')).makeCopy(mt_name,rootFolder);
ssSpreadsheetFile.setShareableByEditors(false);
mtSpreadsheetFile.setShareableByEditors(false);
resultFolder.setShareableByEditors(false);
templateFolder.setShareableByEditors(false);
// ssSpreadsheetFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.EDIT);
mtSpreadsheetFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
mtSpreadsheetFile.addEditor("[email protected]");
init_populate(ssSpreadsheetFile,mtSpreadsheetFile,rootFolder,originFolder,resultFolder,templateFolder,category,callname);
Logger.log("INITIALIZATION SUCCESSFUL");
}
function init_internal(){
Logger.log("Internal Initialization Called at: "+now);
var ssSpreadsheet = SpreadsheetApp.getActive();
var ssSpreadsheetFile = DriveApp.getFileById(ssSpreadsheet.getId());
const mtSpreadsheetFile = DriveApp.getFileById(ssSpreadsheet.getRange("Consensus!B31").getValue());
const rootFolder = DriveApp.getFolderById(ssSpreadsheet.getRange("Consensus!B26").getValue());
const originFolder = DriveApp.getFolderById(ssSpreadsheet.getRange("Consensus!B29").getValue());
const resultFolder = DriveApp.getFolderById(ssSpreadsheet.getRange("Consensus!B27").getValue());
const templateFolder = DriveApp.getFolderById(ssSpreadsheet.getRange("Consensus!B28").getValue());
const category = ssSpreadsheet.getRange("Draw!D26").getValue();
const callname = ssSpreadsheet.getRange("Draw!I26").getValue();
PropertiesService.getScriptProperties().setProperties({
'developers':'[email protected],[email protected]',
'_devPw':'kyptkypt' //if you found this out, you deserve developer rights.
});
PropertiesService.getDocumentProperties().setProperties({
'ssUrl' : ssSpreadsheetFile.getUrl(),
'mtUrl' : mtSpreadsheetFile.getUrl(),
'ssId' : ssSpreadsheetFile.getId(),
'mtId' : mtSpreadsheetFile.getId(),
'folderID_root' : rootFolder.getId(),
'folderID_origin' : originFolder.getId(),
'folderID_result' : resultFolder.getId(),
'folderID_template' : templateFolder.getId(),
'folderURL_root' : rootFolder.getUrl(),
'folderURL_origin' : originFolder.getUrl(),
'folderURL_result' : resultFolder.getUrl(),
'folderURL_template': templateFolder.getUrl()
});
if(PropertiesService.getDocumentProperties().getProperty('status') != 'SOURCE'){
PropertiesService.getDocumentProperties().setProperties({
'category':category.toString(),
'callname':callname.toString(),
'status': 'initialized at '+now+' VERSION: '+VERSION
});
Logger.log(`Internal Initialization Successful (instance): ${category}-${callname}`);
}
read_all_properties();
}
function duplicate(postfix = ` - copied ${now}`){//a function do duplicate an instance. Can be used for backup / sandboxing.
initGate();
if(PropertiesService.getDocumentProperties().getProperty('status') == 'SOURCE'){
Logger.log("Invalid Duplication Root.")
ui.alert("SOURCE System Cannot be Duplicated.");
return;
}
const category = PropertiesService.getDocumentProperties().getProperty('category');
const callname = PropertiesService.getDocumentProperties().getProperty('callname');
const new_ss_name = `[${category}-${callname}] Scoring System ${VERSION}`+postfix;
const new_mt_name = `[${category}-${callname}] Scores Master`+postfix;
var originFolder = DriveApp.getFolderById(PropertiesService.getDocumentProperties().getProperty('folderID_origin'))
var new_rootFolder = originFolder.createFolder(`[${category}-${callname}] Scoring System`+postfix);
var new_resultFolder = new_rootFolder.createFolder("RESULTS");
var new_templateFolder = new_rootFolder.createFolder("TEMPLATES");
var new_ssSpreadsheetFile = DriveApp.getFileById(PropertiesService.getDocumentProperties().getProperty('ssId')).makeCopy(new_ss_name,new_rootFolder);
var new_mtSpreadsheetFile = DriveApp.getFileById(PropertiesService.getDocumentProperties().getProperty('mtId')).makeCopy(new_mt_name,new_rootFolder);
new_ssSpreadsheetFile.setShareableByEditors(false);
new_mtSpreadsheetFile.setShareableByEditors(false);
new_ssSpreadsheetFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.EDIT);
new_mtSpreadsheetFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
new_mtSpreadsheetFile.addEditor("[email protected]");
init_populate(new_ssSpreadsheetFile,new_mtSpreadsheetFile,new_rootFolder,originFolder,new_resultFolder,new_templateFolder);
Logger.log("Duplication Successful");
}
function _init_source(ssname = '[XYPT-SOURCE] Scoring System',mtname = '[XYPT-SOURCE] Scores Master',del = true){
//this function initializes the SOURCE of development, and can only be edited through editor. be careful with this function.
//if you don't know what you are doing, please contact one of the developers
Logger.log("SOURCE INIT DETECTED!")
//Record properties before the potentially get damaged
Logger.log("before source init:");
read_all_properties();
var ssSpreadsheetFile = DriveApp.getFilesByName(ssname).next();
const mtSpreadsheetFile = DriveApp.getFilesByName(mtname).next();
const rootFolder = ssSpreadsheetFile.getParents().next(); // v0.2.1: moved root Folder one level up (created "originFolder")
const originFolder = rootFolder.getParents().next();
const resultFolder = rootFolder.getFoldersByName('RESULTS').next();
const templateFolder = rootFolder.getFoldersByName('TEMPLATES').next();
if (del){
delete_properties();
}
PropertiesService.getScriptProperties().setProperties({
'developers':'[email protected],[email protected]',
'_devPw':'kyptkypt' //if you found this, you deserve developer rights.
});
PropertiesService.getDocumentProperties().setProperties({
'ssUrl' : ssSpreadsheetFile.getUrl(),
'mtUrl' : mtSpreadsheetFile.getUrl(),
'ssId' : ssSpreadsheetFile.getId(),
'mtId' : mtSpreadsheetFile.getId(),
'folderID_root' : rootFolder.getId(),
'folderID_origin' : originFolder.getId(),
'folderID_result' : resultFolder.getId(),
'folderID_template' : templateFolder.getId(),
'folderURL_root' : rootFolder.getUrl(),
'folderURL_origin' : originFolder.getUrl(),
'folderURL_result' : resultFolder.getUrl(),
'folderURL_template': templateFolder.getUrl()
});
PropertiesService.getDocumentProperties().setProperties({
'status': 'SOURCE'
});
init_populate(ssSpreadsheetFile,mtSpreadsheetFile,rootFolder,originFolder,resultFolder,templateFolder);
Logger.log("source init completed:");
read_all_properties();
Logger.log("SOURCE INIT SUCCESSFUL")
}
function init_populate(ssSpreadsheetFile,mtSpreadsheetFile,rootFolder,originFolder,resultFolder,templateFolder,category=undefined,callname=undefined){
var ssSpreadsheet = SpreadsheetApp.openById(ssSpreadsheetFile.getId());
ssSpreadsheet.getRange("Consensus!B26").setValue(rootFolder.getId()); //root dir ID
ssSpreadsheet.getRange("Consensus!B29").setValue(originFolder.getId()); // origin dir ID
ssSpreadsheet.getRange("Consensus!B27").setValue(resultFolder.getId()); //result dir ID
ssSpreadsheet.getRange("Consensus!B28").setValue(templateFolder.getId()); //template dir ID
ssSpreadsheet.getRange("Consensus!B30").setValue(ssSpreadsheetFile.getId()) ;//scoring system dir ID
ssSpreadsheet.getRange("Consensus!B31").setValue(mtSpreadsheetFile.getId()) ;//scores master dir ID
ssSpreadsheet.getRange("Consensus!F1" ).setValue(VERSION);
if (category != undefined){
ssSpreadsheet.getRange("Draw!D26" ).setValue(category);
ssSpreadsheet.getRange("Draw!I26" ).setValue(callname);
}
}
function add_staff(){
var staffSheet = SpreadsheetApp.getActive().getSheetByName('Staff');
var i = 3;
var j = 0;
var ssSpreadsheetFile = DriveApp.getFileById(PropertiesService.getDocumentProperties().getProperty('ssId'));
var resultFolder = DriveApp.getFileById(PropertiesService.getDocumentProperties().getProperty('folderID_result'));
var templateFolder = DriveApp.getFileById(PropertiesService.getDocumentProperties().getProperty('folderID_template'));
var acc_temp = '';
while(staffSheet.getRange(1,i).getValue() != ''){
j = 5;
var perm_ss = staffSheet.getRange(2,i).getValue();
var perm_res = staffSheet.getRange(3,i).getValue();
var perm_templ = staffSheet.getRange(4,i).getValue();
while(true){
acc_temp = staffSheet.getRange(j,i).getValue();
if(acc_temp == ''){break;}
if(perm_ss == 'view'){ssSpreadsheetFile.addViewer(acc_temp);}
else if(perm_ss == 'edit'){ssSpreadsheetFile.addEditor(acc_temp);}
if(perm_res == 'view'){resultFolder.addViewer(acc_temp);}
else if(perm_res == 'edit'){resultFolder.addEditor(acc_temp);}
if(perm_templ == 'view'){templateFolder.addViewer(acc_temp);}
else if(perm_templ == 'edit'){templateFolder.addEditor(acc_temp);}
Logger.log(`[ADD STAFF] added ${staffSheet.getRange(j,i).getValue()} as ${staffSheet.getRange(1,i).getValue()}`)
j += 1;
}
i += 1;
}
}
function clear_staff(){
var ssSpreadsheetFile = DriveApp.getFileById(PropertiesService.getDocumentProperties().getProperty('ssId'));
var resultFolder = DriveApp.getFileById(PropertiesService.getDocumentProperties().getProperty('folderID_result'));
var templateFolder = DriveApp.getFileById(PropertiesService.getDocumentProperties().getProperty('folderID_template'));
for(var file of [ssSpreadsheetFile,resultFolder,templateFolder]){
var editors = file.getEditors();
var viewers = file.getViewers();
for (var ed of editors){file.removeEditor(ed);}
for (var ve of viewers){file.removeViewer(ve);}
}
}