Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Doc creator script : it allows to create a doc every working day by copying a chosen template. All copies are renamed with the date appended to the template name and are in the same original folder.
- V2 with mail notification & popups + recursive folder display - Using getFilesByType(DocsList.FileType.DOCUMENT) to try speeding up the app launch...
- Added the possibility to see the current process (triggers HAVE to be created with this version where the names are stored along with triggers ID)
- Added ability to test create on weekend !!
- UserProperties version to allow multiUser on one single deployed version
- Serge Gabet aka serge Insas september-12-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':'6px','font-family':"Arial, sans-serif",'fontSize':'10pt','border-radius':'6px'}
- function doGet(){
- var folderlist = []
- var allFolders = listFolders();
- for(var ff=1;ff<allFolders.length;++ff){
- Logger.log(allFolders[ff][1]);
- var folder = DocsList.getFolder(allFolders[ff][1]);
- try{
- Logger.log('editors : '+folder.getEditors());// check if you have edit rights on this folder, if not > don't show in the list
- folderlist.push(allFolders[ff][1]+' ('+allFolders[ff][3]+' docs)');
- }catch(err){}
- }
- var app = UiApp.createApplication().setTitle("AutoDocCreator");
- var Apanel = app.createScrollPanel().setSize('100%', '100%').setStyleAttribute('background', 'f5f5ff');
- 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("280");
- var Dlist= app.createListBox(false).setName("Dlb").setId("Dlb").setVisibleItemCount(12).setWidth("350");
- var queryL = app.createLabel('Search in folder :');
- var query = app.createTextBox().setName('query').setId('query');
- var Flab=app.createLabel('Folder List (with edit rights)').setWidth("280");
- var Dlab=app.createLabel('Document List (text document only)').setWidth("350");
- Flist.addItem('Choose a folder').addItem('My Drive');
- 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 testCreateHandler = app.createServerHandler('testCreateDocument').addCallbackElement(panel);
- var testCreate = app.createButton('Test create<br>the document',testCreateHandler).setId('testCreate').setVisible(false).setStyleAttributes(btnAttributes).addClickHandler(waitHandler);
- var seeHandler = app.createServerHandler('seeTrig');
- var killHandler = app.createServerHandler('killTrig');
- var seeTrig = app.createButton('See all current processes', seeHandler).setStyleAttributes(btnAttributes).setId('see').addClickHandler(waitHandler);
- var kill = app.createButton('Kill all current processes', killHandler).setStyleAttributes(btnAttributes).setId('kill').addClickHandler(waitHandler);
- var mailCheck = app.createCheckBox('send mail on doc creation').setId('mailCheck').setName('mailCheck').setVisible(false);
- if(UserProperties.getProperty('mailCheck')=='true'){mailCheck.setValue(true)};
- var grid = app.createGrid(8,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,0,seeTrig)
- .setWidget(5,0,kill)
- .setWidget(5,1,choose)
- .setWidget(6,1,chosen)
- .setWidget(7,1,testCreate)
- .setWidget(6,0,mailCheck)
- .setWidget(7,0,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 listFolders() {
- var topFolder = DocsList.getRootFolder() ; // start point
- var foldersArray = [];
- foldersArray = getFolders(topFolder.getName().replace('Root','MyDrive'),topFolder,foldersArray);
- return foldersArray;
- }
- function getFolders(path, container,arrayin) {
- var folders = container.getFolders(0, 300);
- var folderCount = folders.length;
- var docCount = container.getFilesByType(DocsList.FileType.DOCUMENT).length;
- if(path=='MyDrive'){arrayin.push(['https://drive.google.com/?hl=fr&tab=wo#my-drive',path,folderCount])}
- else{arrayin.push([container.getUrl(),path.replace('MyDrive/',''),folderCount,docCount])}
- for (var i=0;i<folders.length;i++) {
- var thisFolder = folders[i].getName();
- var thisPath = path+"/"+thisFolder;
- getFolders(thisPath,folders[i],arrayin)
- }
- return arrayin;
- }
- 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 testCreate = app.getElementById("testCreate").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.substring(0,e.parameter.Flb.indexOf(' ('));// rip of the content counter ( xx docs)
- if(e.parameter.source=='query'){queryBox.setText(e.parameter.query)};
- if (folderName=='Choose a folder'){Dlist.clear();label.setText(" ");return app}
- if (folderName!='My Drive'&&query!=''){
- doclist = DocsList.getFolder(folderName).getFilesByType(DocsList.FileType.DOCUMENT);
- 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!='My Drive'&&query==''){
- doclist = DocsList.getFolder(folderName).getFilesByType(DocsList.FileType.DOCUMENT)
- for (nn=0;nn<doclist.length;++nn){
- names.push([doclist[nn].getName(),doclist[nn].getId(),doclist[nn].getType()]);
- }
- } else if (folderName=='My Drive'&&query!=''){
- doclist = DocsList.getRootFolder().getFilesByType(DocsList.FileType.DOCUMENT)
- 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=='My Drive'&&query==''){
- doclist = DocsList.getRootFolder().getFilesByType(DocsList.FileType.DOCUMENT);
- 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+")");
- }
- Logger.log(names.length);
- var html = app.createHTML('Only the 100 first items in '+folderName+' are shown<br>Use a folder to limit ').setStyleAttributes(popAttributes);
- var pop = app.createPopupPanel(true).setPopupPosition(150,280).add(html).setPixelSize(400,65).setStyleAttributes(popAttributes);
- Logger.log(names.length);
- if(names.length>100){names=names.splice(names.length-100) ; pop.show()};
- Logger.log(names.length);
- UserProperties.setProperty('docInfos',Utilities.jsonStringify(names));
- UserProperties.setProperty('folderName',folderName);
- return app;
- }
- 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 testCreate = app.getElementById("testCreate").setVisible(false).setEnabled(true);
- var docInfos = Utilities.jsonParse(UserProperties.getProperty('docInfos'));
- 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][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][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][1]+"|"+doctype;
- UserProperties.setProperty('IDs',IDs);
- }
- return app;
- }
- 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);
- var testCreate = app.getElementById("testCreate").setVisible(true);
- var emailCheckHandler = app.createServerHandler('mailOption').addCallbackElement(panel);
- var mailCheck = app.getElementById('mailCheck').setVisible(true).addClickHandler(emailCheckHandler);
- 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<br>and (un)check the email option as desired');
- 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 mailOption(e){
- var app = UiApp.getActiveApplication();
- var mailCheck = e.parameter.mailCheck=='true';
- UserProperties.setProperty('mailCheck',mailCheck);
- var html = app.createHTML().setStyleAttributes(popAttributes)
- if(mailCheck){html.setHTML('A new mail will be sent on every working day around midnight with links to the 6 most recent documents created by this application.')}else{
- html.setHTML('No email will be sent')}
- var pop = app.createPopupPanel(true).setPopupPosition(150,300).add(html).setPixelSize(250,110).setStyleAttributes(popAttributes);
- pop.show();
- return app;
- }
- function seeTrig(e){
- if(!UserProperties.getProperty('triggers')){ UserProperties.setProperty('triggers','')};
- var Existingtriggers = UserProperties.getProperty('triggers').split(',');
- var htmlString = '<b>Document names used as template:</b><br>'
- for(var n=1;n<Existingtriggers.length;++n){
- htmlString+='- '+Existingtriggers[n].split('|')[1]+'<br>';
- }
- var app = UiApp.getActiveApplication();
- var wait = app.getElementById('wait').setVisible(false);
- var html = app.createHTML(htmlString).setStyleAttributes(popAttributes);
- var panel = app.createScrollPanel(html);
- var pop = app.createPopupPanel(true).setPopupPosition(240,280).add(panel).setPixelSize(400,200).setStyleAttributes(popAttributes);
- pop.show();
- 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].split('|')[0]) {
- ScriptApp.deleteTrigger(triggers[i]);
- Logger.log('deleted '+Existingtriggers[n].split('|')[1]);
- }
- }
- }
- UserProperties.setProperty('triggers','');
- UserProperties.setProperty('mailCheck',false);
- UserProperties.setProperty('docUrls','');
- var app = UiApp.getActiveApplication();
- var wait = app.getElementById('wait').setVisible(false);
- var html = app.createHTML('All triggers have been deleted,<br>no document will be created anymore and no mails will be sent.').setStyleAttributes(popAttributes);
- var pop = app.createPopupPanel(true).setPopupPosition(150,280).add(html).setPixelSize(400,65).setStyleAttributes(popAttributes);
- 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 chkmail='';
- if(e.parameter.mailCheck=='true'){chkmail='An email will be sent to you on every working day with the links of the 6 most recently created documents.<br>'};
- 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>'+chkmail+'<br>To stop this process simply re-run this application and choose the "kill all processes" option.').setStyleAttributes(popAttributes)
- var pop = app.createPopupPanel(true).setPopupPosition(150,300).add(html).setPixelSize(400,230).setStyleAttributes(popAttributes);
- pop.show();
- var triggerID = ScriptApp.newTrigger('createDocument').timeBased().everyDays(1).atHour(0).create().getUniqueId();
- if(UserProperties.getKeys().toString().match('triggers')=='triggers'){
- var triggers = UserProperties.getProperty('triggers').split(',');
- }else{
- var triggers = [];
- }
- triggers.push(triggerID+'|'+docName);
- UserProperties.setProperty('triggers',triggers.toString());
- return app;
- }
- function testCreateDocument(e){
- var IDs = UserProperties.getProperty('IDs');
- 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);
- createDocument('test');
- var app = UiApp.getActiveApplication();
- var wait = app.getElementById('wait').setVisible(false);
- var docName = UserProperties.getProperty('docName');
- var folderName = UserProperties.getProperty('folderName');
- Logger.log(docName+' '+folderName);
- var html = app.createHTML('A test document has been created ('+docName+') in the chosen folder ('+folderName+')').setStyleAttributes(popAttributes);
- var pop = app.createPopupPanel(true).setPopupPosition(150,280).add(html).setPixelSize(400,65).setStyleAttributes(popAttributes);
- pop.show();
- return app;
- }
- function createDocument(test){
- if(!test){ var today = new Date().getDay()}else{today=1};
- 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 Folderhref = DocsList.getRootFolder().getUrl();
- var newDoc = DocsList.getFileById(docID).makeCopy(docName+Utilities.formatDate(new Date(),Session.getTimeZone(),'yyyy-MMM-dd'));
- if(folderName!='My Drive'){
- newDoc.addToFolder(DocsList.getFolder(folderName));
- newDoc.removeFromFolder(DocsList.getRootFolder());
- Folderhref = DocsList.getFolder(folderName).getUrl();
- }
- var newDocUrl = newDoc.getName()+'|'+newDoc.getUrl();
- if(UserProperties.getKeys().toString().indexOf('docUrls')!=-1||UserProperties.getProperty('docUrls')==''){
- var docUrls = UserProperties.getProperty('docUrls').split(',');
- Logger.log(docUrls);
- }else{
- var docUrls = [];
- }
- var ll = docUrls.length;// check number of memorized docs
- if(ll>5){
- var newList = docUrls.splice(ll-5,5);// if more than 5 keep only last 5 docs
- var docUrls = newList;
- }
- docUrls.push(newDocUrl);
- UserProperties.setProperty('docUrls',docUrls.toString());
- var mailCheck = UserProperties.getProperty('mailCheck')=='true';
- if(!mailCheck){return};
- var msg = 'AutoDocCreator V2 report on '+Utilities.formatDate(new Date(),Session.getTimeZone(),'yyyy-MMM-dd HH:mm')
- var txtMsg = msg+'\n\nA new document has been created for you,\nsee below the list of the most recent documents (most recent on top)\n\n'; // begin text only msg
- msg+='<br><br>A new document has been created for you,<br>see below the list of the most recent documents (most recent on top)<br>';
- msg+='created in <a href="'+Folderhref+'" target="_blank">your chosen folder ('+folderName+').</a><br><br>';
- msg+='<table style="background-color:lightblue;border-collapse:collapse;" border = 1 cellpadding = 10><tr bgcolor = "#ffaaaa">';// most recent have reddish background
- for(var n=docUrls.length-1;n>0;n--){
- var x = docUrls[n].split('|');
- var name = x[0];
- var href = x[1];
- msg+='<td>'+(docUrls.length-n)+'</td><td><a href="'+href+'" target="_blank">'+name+'</a></td></tr><tr>';// open link in other tab
- txtMsg+=(docUrls.length-n)+' - '+name+' : '+href+'\n'
- }
- msg+='</table><br><br>Use <a href="'+ScriptApp.getService().getUrl()+'" target="_blank">this link</a> to run the application that created the files<br>';
- txtMsg+='\n\nUse this link to run the application that created the files\n'+ScriptApp.getService().getUrl()+'\n';
- MailApp.sendEmail(Session.getEffectiveUser().getEmail(),'AutoCreateDoc report', txtMsg,{'htmlBody':msg});
- }
- //eof 09-14_2013
Advertisement
Add Comment
Please, Sign In to add comment