serge_insas

autoDocCreator

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