Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- UserProperties version to allow multiUser on one single deplOyed version
- 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.
- Serge Gabet aka serge Insas september-10-2013 **Google Apps Script**
- */
- //styles
- var popAttributes = {'padding':'10px','font-family':"Arial, sans-serif",'fontSize':'14pt','color':'#000099','background':'#ffffee','border-radius':'10px'}
- var btnAttributes = {'padding':'3px','font-family':"Arial, sans-serif",'fontSize':'10pt','border-radius':'4px'}
- function doGet(){
- var folderlist = new Array();
- var folders=DocsList.getFolders()
- for(var ff=0;ff<folders.length;++ff){
- folderlist.push(folders[ff].getName());
- }
- var app = UiApp.createApplication().setTitle("AutoDocCreator");
- var Apanel = app.createAbsolutePanel().setSize('100%', '100%').setStyleAttribute('background', 'dedeff')
- var wait = app.createImage('https://dl.dropboxusercontent.com/u/211279/loading3T.gif').setId('wait').setVisible(false);
- var panel = app.createVerticalPanel().setStyleAttribute('padding', '30px').setId('panel');
- var Flist= app.createListBox(false).setName("Flb").setId("Flb").setVisibleItemCount(12).setWidth("180");
- var Dlist= app.createListBox(false).setName("Dlb").setId("Dlb").setVisibleItemCount(12).setWidth("280");
- var queryL = app.createLabel('Search in folder :');
- var query = app.createTextBox().setName('query').setId('query');
- var Flab=app.createLabel('Folder List').setWidth("80");
- var Dlab=app.createLabel('Document List').setWidth("100");
- Flist.addItem('Choose a folder').addItem('Root content');
- for(ff=0;ff<folderlist.length;++ff){
- Flist.addItem(folderlist[ff]);
- }
- var waitHandler = app.createClientHandler().forTargets(wait).setVisible(true);
- var docname = app.createLabel().setId('doc');
- var link = app.createAnchor('open ', 'href').setId("link").setVisible(false);
- var choose = app.createButton('Choose as template Doc').setId('choose').setVisible(false).setStyleAttributes(btnAttributes).addClickHandler(waitHandler);
- 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);
- var cpanel = app.createVerticalPanel().add(choose).add(chosen);
- var killHandler = app.createServerHandler('killTrig');
- var kill = app.createButton('Kill all current processes', killHandler).setStyleAttributes(btnAttributes).setId('kill').addClickHandler(waitHandler);
- var grid = app.createGrid(5,3);
- grid.setWidget(0,0,Flab)
- .setWidget(1,0,Flist)
- .setWidget(0,1,Dlab)
- .setWidget(1,1,Dlist)
- .setWidget(2,0,queryL)
- .setWidget(3,0,query)
- .setWidget(2,1,docname)
- .setWidget(3,1,link)
- .setWidget(4,1,cpanel)
- .setWidget(4,0,kill)
- .setWidget(4,2,wait)
- Apanel.add(panel.add(grid));
- //
- var clihandler = app.createClientHandler()
- .forTargets(choose).setVisible(true)
- .forEventSource().setVisible(false);
- choose.addClickHandler(clihandler);
- var FHandler = app.createServerHandler("setTemplate");
- Flist.addChangeHandler(FHandler).addClickHandler(waitHandler);
- FHandler.addCallbackElement(panel);
- var queryHandler = app.createServerHandler("setTemplate");
- query.addKeyUpHandler(queryHandler)
- queryHandler.addCallbackElement(panel);
- var DHandler = app.createServerHandler("showlab");
- Dlist.addChangeHandler(DHandler).addClickHandler(waitHandler);
- DHandler.addCallbackElement(panel);
- var createTrigHandler = app.createServerHandler("createTrigger");
- choose.addClickHandler(createTrigHandler)
- chosen.addClickHandler(createTrigHandler)
- createTrigHandler.addCallbackElement(panel);
- app.add(Apanel);
- return app ; }
- function setTemplate(e){
- var app = UiApp.getActiveApplication();
- var wait = app.getElementById('wait').setVisible(false);
- var choose = app.getElementById("choose").setVisible(false);
- var chosen = app.getElementById("chosen").setVisible(false);
- var Dlist = app.getElementById("Dlb");
- var doclist=new Array();
- var label = app.getElementById('doc');
- var names = new Array();
- var queryBox =app.getElementById('query')
- var query = e.parameter.query.toLowerCase();
- var doclist = new Array();
- var folderName = e.parameter.Flb;
- if(e.parameter.source=='query'){queryBox.setText(e.parameter.query)}
- if (folderName=='Choose a folder'){Dlist.clear();label.setText(" ");return app}
- if (folderName!='Root content'&&query!=''){
- doclist = DocsList.getFolder(folderName).getFiles(0,2000)
- for (nn=0;nn<doclist.length;++nn){
- if(doclist[nn].getName().toLowerCase().match(query)==query){names.push([doclist[nn].getName(),doclist[nn].getId(),doclist[nn].getType()])}
- }
- } else if (folderName!='Root content'&&query==''){
- doclist = DocsList.getFolder(folderName).getFiles(0,2000)
- for (nn=0;nn<doclist.length;++nn){
- names.push([doclist[nn].getName(),doclist[nn].getId(),doclist[nn].getType()]);
- }
- } else if (folderName=='Root content'&&query!=''){
- doclist = DocsList.getRootFolder().getFiles(0,2000)
- for (nn=0;nn<doclist.length;++nn){
- if(doclist[nn].getName().toLowerCase().match(query)==query){names.push([doclist[nn].getName(),doclist[nn].getId(),doclist[nn].getType()])}
- }
- } else if (folderName=='Root content'&&query==''){
- doclist = DocsList.getRootFolder().getFiles(0,2000)
- for (nn=0;nn<doclist.length;++nn){
- names.push([doclist[nn].getName(),doclist[nn].getId(),doclist[nn].getType()]);
- }
- }
- if(names.length==0){queryBox.setStyleAttribute('background','#ffaaaa')}else{queryBox.setStyleAttribute('background','#ffffff')}
- names.sort();
- Dlist.clear();
- for(dd=0;dd<names.length;++dd){
- Dlist.addItem(names[dd][0]+" (doc Nr:"+dd+")");
- }
- UserProperties.setProperty('docInfos',names.toString());
- UserProperties.setProperty('folderName',folderName);
- return app ;// update UI
- }
- function showlab(e){
- var app = UiApp.getActiveApplication();
- var wait = app.getElementById('wait').setVisible(false);
- var label = app.getElementById('doc');
- var link = app.getElementById('link');
- var choose = app.getElementById("choose").setVisible(false);
- var chosen = app.getElementById("chosen").setVisible(false).setEnabled(true);
- var docInfos = UserProperties.getProperty('docInfos').split(',');
- if (e.parameter.Dlb!=""){
- var docname = e.parameter.Dlb
- var docN = docname.substr(0,docname.lastIndexOf("("));
- var docindex = docname.substring(Number(docname.lastIndexOf(":"))+1,Number(docname.lastIndexOf(")")));
- var doctype = docInfos[docindex*3+2]
- label.setText(doctype+" : "+docN).setEnabled(false).setStyleAttribute('fontSize', '15');
- if (doctype=='document'){var urlstring = "https://docs.google.com/document/d/";var poststring = "/edit"}
- if (doctype=='spreadsheet'){var urlstring = "https://docs.google.com/spreadsheet/ccc?key=";var poststring = "#gid=0"}
- if (doctype=='photo'){var urlstring = "https://docs.google.com/file/d/";var poststring = "/edit"}
- if (doctype=='blob_item'){var urlstring = "https://docs.google.com/file/d/";var poststring = "/edit"}
- if (doctype=='item'){var urlstring = "https://docs.google.com/file/d/";var poststring = "/edit"}
- var doclink = urlstring+docInfos[docindex*3+1]+poststring;
- link.setVisible(true).setText("Open "+doctype+" in browser").setHref(doclink);
- if(doctype=='document'){choose.setVisible(true)}else{choose.setVisible(false)};
- var IDs = docInfos[docindex*3+1]+"|"+doctype;
- UserProperties.setProperty('IDs',IDs);
- }
- return app ;// update UI
- }
- function createTrigger(e){
- var app = UiApp.getActiveApplication();
- var wait = app.getElementById('wait').setVisible(false);
- var panel = app.getElementById('panel');
- var kill = app.getElementById('kill').setVisible(false);
- var IDs = UserProperties.getProperty('IDs');
- var chosen = app.getElementById("chosen").setVisible(true);
- if (e.parameter.source=='choose'){return app};
- var ID = IDs.substring(0,Number(IDs.lastIndexOf("|")));
- var doctype = IDs.substr(Number(IDs.lastIndexOf("|"))+1);
- var docname = e.parameter.Dlb
- var docN = docname.substr(0,docname.lastIndexOf("("));
- UserProperties.setProperty('docName',docN);
- UserProperties.setProperty('docID',ID);
- var makeTrigger = app.createServerHandler('makeTrig').addCallbackElement(panel);
- chosen.setEnabled(false);
- var msg = app.createHTML('This document will be used as a template to create a new document every working day at 0 AM.'+
- '<br>(document name = <b>'+docN+'+ date</b>)<br>Use the button below to start the process');
- var disableHandler = app.createClientHandler().forEventSource().setEnabled(false);
- var startProcess = app.createButton('Start process',makeTrigger).addClickHandler(disableHandler).setStyleAttributes(btnAttributes);
- panel.add(msg).add(startProcess);
- Logger.log('createTrigger');
- return app;
- }
- function killTrig(e){
- var Existingtriggers = UserProperties.getProperty('triggers').split(',');
- for(var n in Existingtriggers){
- var triggers = ScriptApp.getProjectTriggers();
- for (var i = 0; i < triggers.length; i++) {
- if (triggers[i].getUniqueId() == Existingtriggers[n]) {
- ScriptApp.deleteTrigger(triggers[i]);
- Logger.log('deleted');
- }
- }
- }
- UserProperties.setProperty('triggers','');
- var app = UiApp.getActiveApplication();
- var wait = app.getElementById('wait').setVisible(false);
- var html = app.createHTML('All triggers have been deleted, no document will be created anymore').setStyleAttributes(popAttributes)
- var pop = app.createPopupPanel(true,true).setPopupPosition(150,300).add(html).setPixelSize(400,40);
- pop.show();
- return app;
- }
- function makeTrig(e){
- var app = UiApp.getActiveApplication();
- var wait = app.getElementById('wait').setVisible(false);
- var folderName = UserProperties.getProperty('folderName');
- var docName = UserProperties.getProperty('docName');
- var docID = UserProperties.getProperty('docID');
- var html = app.createHTML('A new document will be created every working day around midnight based on the template ('
- +docName+') in the chosen folder ('+folderName
- +')<br>To stop this process simply re-run this application and choose the "kill all processes" option').setStyleAttributes(popAttributes)
- var pop = app.createPopupPanel(true,true).setPopupPosition(150,300).add(html).setPixelSize(400,200);
- pop.show();
- var triggerID = ScriptApp.newTrigger('createDocument').timeBased().everyDays(1).atHour(0).create().getUniqueId();
- if(UserProperties.getProperties().toString().match('triggers')=='triggers'){
- var triggers = UserProperties.getProperty('triggers').split(',');
- }else{
- var triggers = [];
- }
- triggers.push(triggerID)
- UserProperties.setProperty('triggers',triggers.toString());
- return app
- }
- function createDocument(){
- var today = new Date().getDay();
- if(today==6 || today==0){return} ;// prevents creating doc on Saturday and Sunday
- var folderName = UserProperties.getProperty('folderName');
- var docName = UserProperties.getProperty('docName');
- var docID = UserProperties.getProperty('docID');
- var newDoc = DocsList.getFileById(docID).makeCopy(docName+Utilities.formatDate(new Date(),'EST','yyyy-MMM-dd'));
- if(folderName!='Root content'){
- newDoc.addToFolder(DocsList.getFolder(folderName));
- newDoc.removeFromFolder(DocsList.getRootFolder());
- }
- }
- //eof 09-10_2013
Advertisement
Add Comment
Please, Sign In to add comment