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 |