serge_insas

UserProperties version of AutoDocCreator

Sep 10th, 2013
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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 app = UiApp.createApplication().setTitle("AutoDocCreator");
  20.   var Apanel = app.createAbsolutePanel().setSize('100%', '100%').setStyleAttribute('background', 'dedeff')
  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.   for(ff=0;ff<folderlist.length;++ff){
  32.     Flist.addItem(folderlist[ff]);
  33.   }
  34.   var waitHandler = app.createClientHandler().forTargets(wait).setVisible(true);
  35.   var docname = app.createLabel().setId('doc');
  36.   var link = app.createAnchor('open ', 'href').setId("link").setVisible(false);
  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.       .setWidget(2,0,queryL)
  48.       .setWidget(3,0,query)
  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. //
  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.   FHandler.addCallbackElement(panel);
  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.  
  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.   }
  122.   if(names.length==0){queryBox.setStyleAttribute('background','#ffaaaa')}else{queryBox.setStyleAttribute('background','#ffffff')}              
  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.  
  134. function showlab(e){
  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 choose = app.getElementById("choose").setVisible(false);
  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 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.     if (doctype=='spreadsheet'){var urlstring = "https://docs.google.com/spreadsheet/ccc?key=";var poststring = "#gid=0"}
  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.   return app   ;// update UI
  160. }
  161.  
  162.  
  163. function createTrigger(e){
  164.   var app = UiApp.getActiveApplication();
  165.   var wait = app.getElementById('wait').setVisible(false);
  166.   var panel = app.getElementById('panel');
  167.   var kill = app.getElementById('kill').setVisible(false);
  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 disableHandler = app.createClientHandler().forEventSource().setEnabled(false);
  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.     var triggers = ScriptApp.getProjectTriggers();
  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 wait = app.getElementById('wait').setVisible(false);
  202.   var html = app.createHTML('All triggers have been deleted, no document will be created anymore').setStyleAttributes(popAttributes)
  203.   var pop = app.createPopupPanel(true,true).setPopupPosition(150,300).add(html).setPixelSize(400,40);
  204.   pop.show();
  205.   return app;
  206. }
  207.  
  208. function makeTrig(e){
  209.   var app = UiApp.getActiveApplication();
  210.   var wait = app.getElementById('wait').setVisible(false);
  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.                             +')<br>To stop this process simply re-run this application and choose the "kill all processes" option').setStyleAttributes(popAttributes)
  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 triggers = [];
  224.       }
  225.   triggers.push(triggerID)
  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
Advertisement
Add Comment
Please, Sign In to add comment