View difference between Paste ID: CVZNxkKv and czr2xuwC
SHOW: | | - or go back to the newest paste.
1
/*
2
3
UserProperties version to allow multiUser on one single deplOyed version
4
5
Doc creator script : it allows to create a doc every working day by copying a chosen template. All copies are renamed with the date and are in the same original folder.
6
Serge Gabet aka serge Insas september-10-2013 **Google Apps Script**
7
  */
8
//styles
9
var popAttributes = {'padding':'10px','font-family':"Arial, sans-serif",'fontSize':'14pt','color':'#000099','background':'#ffffee','border-radius':'10px'}
10
var btnAttributes = {'padding':'3px','font-family':"Arial, sans-serif",'fontSize':'10pt','border-radius':'4px'}
11
12
13
function doGet(){
14
  var folderlist = new Array();
15
  var folders=DocsList.getFolders()
16
  for(var ff=0;ff<folders.length;++ff){
17
    folderlist.push(folders[ff].getName());
18
  }
19-
  var hidden = app.createHidden('hidden').setId('hidden');
19+
20-
  var hiddenlink = app.createHidden('hiddenlink').setId('hiddenlink');
20+
21
  var wait = app.createImage('https://dl.dropboxusercontent.com/u/211279/loading3T.gif').setId('wait').setVisible(false);
22
  var panel = app.createVerticalPanel().setStyleAttribute('padding', '30px').setId('panel');
23
  var Flist= app.createListBox(false).setName("Flb").setId("Flb").setVisibleItemCount(12).setWidth("180");
24
  var Dlist= app.createListBox(false).setName("Dlb").setId("Dlb").setVisibleItemCount(12).setWidth("280");
25
  var queryL = app.createLabel('Search in folder :');
26
  var query = app.createTextBox().setName('query').setId('query');
27
  var Flab=app.createLabel('Folder List').setWidth("80");
28
  var Dlab=app.createLabel('Document List').setWidth("100");
29
  
30
  Flist.addItem('Choose a folder').addItem('Root content');
31-
  var choose = app.createButton('Choose as template Doc').setId('choose').setVisible(false).setStyleAttributes(btnAttributes);
31+
32-
  var chosen = app.createButton('Create a timer trigger for every day at 00:00 from Monday to Friday').setId('chosen').setVisible(false).setStyleAttributes(btnAttributes);                            
32+
33
  }
34
  var waitHandler = app.createClientHandler().forTargets(wait).setVisible(true);
35-
  var kill = app.createButton('Kill all current processes', killHandler).setStyleAttributes(btnAttributes).setId('kill');
35+
36-
  var grid = app.createGrid(5,2);
36+
37
  var choose = app.createButton('Choose as template Doc').setId('choose').setVisible(false).setStyleAttributes(btnAttributes).addClickHandler(waitHandler);
38
  var chosen = app.createButton('Create a timer trigger for every day<br>at 00:00 from Monday to Friday').setId('chosen').setVisible(false).setStyleAttributes(btnAttributes).addClickHandler(waitHandler);                            
39
  var cpanel = app.createVerticalPanel().add(choose).add(chosen);
40
  var killHandler = app.createServerHandler('killTrig');
41
  var kill = app.createButton('Kill all current processes', killHandler).setStyleAttributes(btnAttributes).setId('kill').addClickHandler(waitHandler);
42
  var grid = app.createGrid(5,3);
43
  grid.setWidget(0,0,Flab)
44
      .setWidget(1,0,Flist)
45
      .setWidget(0,1,Dlab)
46
      .setWidget(1,1,Dlist)
47-
  panel.add(grid).add(hidden).add(hiddenlink);
47+
48-
  Apanel.add(panel)
48+
49
      .setWidget(2,1,docname)
50
      .setWidget(3,1,link)
51
      .setWidget(4,1,cpanel)
52
      .setWidget(4,0,kill)
53
      .setWidget(4,2,wait)
54
  
55
  Apanel.add(panel.add(grid));
56-
  Flist.addChangeHandler(FHandler)
56+
57
  var clihandler = app.createClientHandler()
58
     .forTargets(choose).setVisible(true)
59
     .forEventSource().setVisible(false);
60
   choose.addClickHandler(clihandler);
61
62
  var FHandler = app.createServerHandler("setTemplate");
63
  Flist.addChangeHandler(FHandler).addClickHandler(waitHandler);
64-
  Dlist.addChangeHandler(DHandler);
64+
65
  
66
  var queryHandler = app.createServerHandler("setTemplate");
67
  query.addKeyUpHandler(queryHandler)
68
  queryHandler.addCallbackElement(panel);
69
70
  var DHandler = app.createServerHandler("showlab");
71
  Dlist.addChangeHandler(DHandler).addClickHandler(waitHandler);
72
  DHandler.addCallbackElement(panel);
73
74
  var createTrigHandler = app.createServerHandler("createTrigger");
75
  choose.addClickHandler(createTrigHandler)
76
  chosen.addClickHandler(createTrigHandler)
77
  createTrigHandler.addCallbackElement(panel);
78
79
  app.add(Apanel);  
80
return app   ;  }
81
82-
  var hidden = app.getElementById("hidden");  
82+
83
84
function setTemplate(e){
85
  var app = UiApp.getActiveApplication();
86
  var wait = app.getElementById('wait').setVisible(false);
87
  var choose = app.getElementById("choose").setVisible(false);
88
  var chosen = app.getElementById("chosen").setVisible(false);
89
  var Dlist = app.getElementById("Dlb");  
90
  var doclist=new Array();
91
  var label = app.getElementById('doc');
92
  var names = new Array();
93
  var queryBox =app.getElementById('query')
94
  var query = e.parameter.query.toLowerCase();
95
  var doclist = new Array();
96
  var folderName = e.parameter.Flb;
97
  if(e.parameter.source=='query'){queryBox.setText(e.parameter.query)}
98
  
99
  if (folderName=='Choose a folder'){Dlist.clear();label.setText(" ");return app}
100
  
101
  if (folderName!='Root content'&&query!=''){
102
    doclist = DocsList.getFolder(folderName).getFiles(0,2000)
103
    for (nn=0;nn<doclist.length;++nn){
104
      if(doclist[nn].getName().toLowerCase().match(query)==query){names.push([doclist[nn].getName(),doclist[nn].getId(),doclist[nn].getType()])}
105
    }
106
  } else if (folderName!='Root content'&&query==''){
107
    doclist = DocsList.getFolder(folderName).getFiles(0,2000)
108
    for (nn=0;nn<doclist.length;++nn){
109
      names.push([doclist[nn].getName(),doclist[nn].getId(),doclist[nn].getType()]);
110
    }
111
  } else if (folderName=='Root content'&&query!=''){
112
    doclist = DocsList.getRootFolder().getFiles(0,2000)
113
    for (nn=0;nn<doclist.length;++nn){
114
      if(doclist[nn].getName().toLowerCase().match(query)==query){names.push([doclist[nn].getName(),doclist[nn].getId(),doclist[nn].getType()])}
115
    }
116
  } else if (folderName=='Root content'&&query==''){
117
    doclist = DocsList.getRootFolder().getFiles(0,2000)
118
    for (nn=0;nn<doclist.length;++nn){
119
      names.push([doclist[nn].getName(),doclist[nn].getId(),doclist[nn].getType()]);
120
    }
121-
  hidden.setValue(names.toString());
121+
122-
  ScriptProperties.setProperty('folderName',folderName);
122+
123
  names.sort();
124
  Dlist.clear();
125
  for(dd=0;dd<names.length;++dd){
126
    Dlist.addItem(names[dd][0]+" (doc Nr:"+dd+")");
127
  }
128
  UserProperties.setProperty('docInfos',names.toString());
129
  UserProperties.setProperty('folderName',folderName);
130
  return app   ;// update UI
131
}
132
133-
  var hidden = e.parameter.hidden.split(',');
133+
134-
  var hiddenlink = app.getElementById("hiddenlink");
134+
135
  var app = UiApp.getActiveApplication();
136
  var wait = app.getElementById('wait').setVisible(false);
137
  var label = app.getElementById('doc');
138
  var link = app.getElementById('link');
139-
    var doctype = hidden[docindex*3+2]
139+
140
  var chosen = app.getElementById("chosen").setVisible(false).setEnabled(true);
141
  var docInfos = UserProperties.getProperty('docInfos').split(',');
142
  if (e.parameter.Dlb!=""){
143
    var docname = e.parameter.Dlb
144
    var docN = docname.substr(0,docname.lastIndexOf("("));
145
    var docindex = docname.substring(Number(docname.lastIndexOf(":"))+1,Number(docname.lastIndexOf(")")));
146-
    var doclink = urlstring+hidden[docindex*3+1]+poststring;
146+
    var doctype = docInfos[docindex*3+2]
147
    label.setText(doctype+" : "+docN).setEnabled(false).setStyleAttribute('fontSize', '15');
148
    if (doctype=='document'){var urlstring = "https://docs.google.com/document/d/";var poststring = "/edit"}
149-
    hiddenlink.setValue(hidden[docindex*3+1]+"|"+doctype);
149+
150
    if (doctype=='photo'){var urlstring = "https://docs.google.com/file/d/";var poststring = "/edit"}
151
    if (doctype=='blob_item'){var urlstring = "https://docs.google.com/file/d/";var poststring = "/edit"}
152
    if (doctype=='item'){var urlstring = "https://docs.google.com/file/d/";var poststring = "/edit"}
153
    var doclink = urlstring+docInfos[docindex*3+1]+poststring;
154
    link.setVisible(true).setText("Open "+doctype+" in browser").setHref(doclink); 
155
    if(doctype=='document'){choose.setVisible(true)}else{choose.setVisible(false)};
156
    var IDs = docInfos[docindex*3+1]+"|"+doctype;
157
    UserProperties.setProperty('IDs',IDs);
158
  }
159-
  var hiddenlink =  e.parameter.hiddenlink;  
159+
160
}
161
162-
  var hiddenlink =  e.parameter.hiddenlink;  
162+
163-
  var ID = hiddenlink.substring(0,Number(hiddenlink.lastIndexOf("|")));
163+
164-
  var doctype = hiddenlink.substr(Number(hiddenlink.lastIndexOf("|"))+1);
164+
165
  var wait = app.getElementById('wait').setVisible(false);
166
  var panel = app.getElementById('panel');
167-
  ScriptProperties.setProperty('docName',docN);
167+
168-
  ScriptProperties.setProperty('docID',ID);
168+
  var IDs =  UserProperties.getProperty('IDs');  
169
  var chosen = app.getElementById("chosen").setVisible(true);
170
  if (e.parameter.source=='choose'){return app};
171
  var ID = IDs.substring(0,Number(IDs.lastIndexOf("|")));
172
  var doctype = IDs.substr(Number(IDs.lastIndexOf("|"))+1);
173
  var docname = e.parameter.Dlb
174
  var docN = docname.substr(0,docname.lastIndexOf("("));
175
  UserProperties.setProperty('docName',docN);
176
  UserProperties.setProperty('docID',ID);
177
  var makeTrigger = app.createServerHandler('makeTrig').addCallbackElement(panel);
178
  chosen.setEnabled(false);
179
  var msg = app.createHTML('This document will be used as a template to create a new document every working day at 0 AM.'+
180
                           '<br>(document name = <b>'+docN+'+ date</b>)<br>Use the button below to start the process');
181-
  var Existingtriggers =  ScriptProperties.getProperty('triggers').split(',');
181+
182
  var startProcess = app.createButton('Start process',makeTrigger).addClickHandler(disableHandler).setStyleAttributes(btnAttributes);
183
  panel.add(msg).add(startProcess);
184
  Logger.log('createTrigger');
185
  return app;
186
}
187
188
function killTrig(e){
189
  var Existingtriggers =  UserProperties.getProperty('triggers').split(',');
190
  for(var n in Existingtriggers){
191-
  ScriptProperties.setProperty('triggers','');
191+
192
    for (var i = 0; i < triggers.length; i++) {
193
      if (triggers[i].getUniqueId() == Existingtriggers[n]) {
194
        ScriptApp.deleteTrigger(triggers[i]);
195
        Logger.log('deleted');
196
      }
197
    }
198
  }
199
  UserProperties.setProperty('triggers','');
200
  var app = UiApp.getActiveApplication();
201-
  var folderName = ScriptProperties.getProperty('folderName');
201+
  var wait = app.getElementById('wait').setVisible(false);
202-
  var docName = ScriptProperties.getProperty('docName');
202+
203-
  var docID = ScriptProperties.getProperty('docID');
203+
204
  pop.show();
205
  return app;
206
}
207
208
function makeTrig(e){
209
  var app = UiApp.getActiveApplication();
210-
  if(ScriptProperties.getKeys().toString().match('triggers')=='triggers'){
210+
  var wait = app.getElementById('wait').setVisible(false);
211-
    var triggers =  ScriptProperties.getProperty('triggers').split(',');
211+
  var folderName = UserProperties.getProperty('folderName');
212
  var docName = UserProperties.getProperty('docName');
213
  var docID = UserProperties.getProperty('docID');
214
  var html = app.createHTML('A new document will be created every working day around midnight based on the template ('
215
                            +docName+') in the chosen folder ('+folderName
216-
  ScriptProperties.setProperty('triggers',triggers.toString());
216+
217
  var pop = app.createPopupPanel(true,true).setPopupPosition(150,300).add(html).setPixelSize(400,200);
218
  pop.show();
219
  var triggerID = ScriptApp.newTrigger('createDocument').timeBased().everyDays(1).atHour(0).create().getUniqueId();
220
  if(UserProperties.getProperties().toString().match('triggers')=='triggers'){
221
    var triggers =  UserProperties.getProperty('triggers').split(',');
222
    }else{
223-
  var folderName = ScriptProperties.getProperty('folderName');
223+
224-
  var docName = ScriptProperties.getProperty('docName');
224+
225-
  var docID = ScriptProperties.getProperty('docID');
225+
226
  UserProperties.setProperty('triggers',triggers.toString());
227
  return app
228
}
229
230
function createDocument(){
231
  var today = new Date().getDay();
232
  if(today==6 || today==0){return} ;// prevents creating doc on Saturday and Sunday
233
  var folderName = UserProperties.getProperty('folderName');
234
  var docName = UserProperties.getProperty('docName');
235
  var docID = UserProperties.getProperty('docID');
236
  var newDoc = DocsList.getFileById(docID).makeCopy(docName+Utilities.formatDate(new Date(),'EST','yyyy-MMM-dd'));
237
  if(folderName!='Root content'){
238
  newDoc.addToFolder(DocsList.getFolder(folderName));
239
  newDoc.removeFromFolder(DocsList.getRootFolder());
240
  }
241
}
242
//eof 09-10_2013