Advertisement
anonydee

Untitled

May 12th, 2023
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 6.42 KB | Source Code | 0 0
  1. //add-on menu
  2. function onOpen() {
  3.     SpreadsheetApp.getUi()
  4.         .createMenu("Contacts")
  5.         .addItem('Turn ON Form Submit', 'onFormSubmits')
  6.         .addItem('Turn OFF Form Submit', 'offFormSubmits')
  7.         .addSeparator()
  8.         .addItem('Authorize first time', 'authorize')
  9.         .addSeparator()
  10.         .addItem('Contact', 'showContact')
  11.         .addToUi();
  12. }
  13.  
  14. function authorize() {
  15.     showAlert("Successfully authorized!")
  16. }
  17.  
  18. //on edit and on form submit triggers
  19. function onFormSubmits() {
  20.     offFormSubmits(true)
  21.     ScriptApp.newTrigger("onFormSubmit")
  22.         .forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())
  23.         .onFormSubmit()
  24.         .create();
  25.     showAlert("Successfully turned ON Service");
  26. }
  27.  
  28. function offFormSubmits(silent) {
  29.     deleteTriggers(true, "onFormSubmit");
  30.     if(!silent) showAlert("Successfully turned OFF Service");
  31. }
  32.  
  33. function deleteTriggers(silent, handlerFunction) {
  34.     var triggers = ScriptApp.getProjectTriggers();
  35.     if(handlerFunction) {
  36.         for(var i = 0; i < triggers.length; i++) {
  37.             if(triggers[i].getHandlerFunction() == handlerFunction) {
  38.                 ScriptApp.deleteTrigger(triggers[i]);
  39.             }
  40.         }
  41.     } else {
  42.         for(var i = 0; i < triggers.length; i++) {
  43.             ScriptApp.deleteTrigger(triggers[i]);
  44.         }
  45.         if(!silent) showAlert("All Schedules deleted");
  46.     }
  47. }
  48.  
  49. //alert
  50. function showAlert(msg) {
  51.     var ui = SpreadsheetApp.getUi();
  52.     var result = ui.alert(' ', msg + "", ui.ButtonSet.OK);
  53. }
  54.  
  55. //contact
  56. function showContact() {
  57.     showAlert('This add-on/script was developed by landing.hk. xx@xx.com');
  58. }
  59.  
  60. //simple key pair JSON
  61. function getColumnNamedValues(values) {
  62.     var obj = {}
  63.     for(var i = 1; i < values.length; i++) {
  64.         if(values[i][0]) {
  65.             obj[values[i][0]] = values[i][1];
  66.         }
  67.     }
  68.     return obj;
  69. }
  70.  
  71. function getIdFromUrl(url) {
  72.     return url.match(/[-\w]{25,}/)[0];
  73. }
  74.  
  75. function getHeadersAsJSON(values) {
  76.     var obj = {}
  77.     var headers = values[0]
  78.     for(var i = 0; i < headers.length; i++) {
  79.         if(headers[i]) {
  80.             obj[headers[i]] = i;
  81.         }
  82.     }
  83.     return obj;
  84. }
  85.  
  86. function getContactGroups() {
  87.     var pageSize = 1000;
  88.     var pageToken = undefined;
  89.     var groups = [];
  90.     const contactGroups = {};
  91.     do {
  92.         var contactGroupsList = People.ContactGroups.list({
  93.             pageSize: pageSize,
  94.             pageToken: pageToken
  95.         });
  96.         groups = groups.concat(contactGroupsList.contactGroups)
  97.         pageToken = contactGroupsList["nextPageToken"]
  98.     } while(contactGroupsList["nextPageToken"]);
  99.     return groups;
  100. }
  101.  
  102. function onFormSubmit(e) {
  103.     Logger.log(JSON.stringify(e));
  104.     var e = {
  105.         "authMode": "FULL",
  106.         "namedValues": {
  107.             "Size": ["Size1"],
  108.             "Phone no": ["66071058"],
  109.             "quantity": ["10"],
  110.             "Paid verification": [""],
  111.             "Timestamp": ["12/05/2023 16:53:12"],
  112.             "Item": ["TEST1"]
  113.         },
  114.         "range": {
  115.             "columnEnd": 7,
  116.             "columnStart": 1,
  117.             "rowEnd": 24,
  118.             "rowStart": 24
  119.         },
  120.         "source": {},
  121.         "triggerUid": "6918381830689003333",
  122.         "values": ["12/05/2023 16:53:12", "66071058", "TEST1", "Size1", "10", ""]
  123.     }
  124.  
  125.     try {
  126.         if(e.range.columnStart == e.range.columnEnd) return;
  127.         var ss = SpreadsheetApp.getActiveSpreadsheet();
  128.         var settings = getColumnNamedValues(ss.getSheetByName("SETTINGS")
  129.             .getDataRange()
  130.             .getValues())
  131.         var sheet = ss.getSheetByName(settings["SHEETNAME_DEFAULT"]);
  132.         var headerObj = getHeadersAsJSON(sheet.getRange("1:1")
  133.             .getDisplayValues());
  134.         var values = sheet.getRange(e.range.rowStart + ":" + e.range.rowStart)
  135.             .getValues();
  136.  
  137.         var lookup = getContactGroups();
  138.  
  139.         x = values[0][headerObj[settings["LANDINGPAGE"]]]?.toString()
  140.         if(x) {
  141.             var found = false;
  142.  
  143.             for(var k = 0; k < lookup.length; k++) {
  144.                 if(lookup[k].formattedName == x) {
  145.                     contactGroupResourceName = (lookup[k].resourceName);
  146.                     found = true;
  147.                     break;
  148.                 }
  149.             }
  150.  
  151.             if(!found) {
  152.                 var newGroup = People.ContactGroups.create({
  153.                     "contactGroup": {
  154.                         "name": x
  155.                     }
  156.                 });
  157.                 contactGroupResourceName = (newGroup.resourceName);
  158.             }
  159.  
  160.             console.log(`${values[0][headerObj[settings["NAME"]]]?.toString()}`)
  161.             //make a false call
  162.             People.People.searchContacts({
  163.                 "query": `${values[0][headerObj[settings["NAME"]]]?.toString()}`,
  164.                 "readMask": "userDefined",
  165.                 "sources": [
  166.                     "READ_SOURCE_TYPE_CONTACT"
  167.                 ]
  168.             });
  169.             Utilities.sleep(2000); //induce some sleep
  170.  
  171.             //make a second call so that cache is refreshed, this is a google bug and we make a workaround
  172.             var search = People.People.searchContacts({
  173.                 "query": `${values[0][headerObj[settings["NAME"]]]?.toString()}`,
  174.                 "readMask": "userDefined",
  175.                 "sources": [
  176.                     "READ_SOURCE_TYPE_CONTACT"
  177.                 ]
  178.             })
  179.  
  180.             console.log(search)
  181.  
  182.             var exitsingUserDefinedPairs = search.results[0].person.userDefined.map(ud => {
  183.                 return {
  184.                     "key": ud.key,
  185.                     "value": ud.value
  186.                 }
  187.             })
  188.  
  189.             foundContactResource = search?.results?.[0].person.resourceName;
  190.             console.log(foundContactResource)
  191.  
  192.             if(foundContactResource) {
  193.                 People.People.deleteContact(foundContactResource.toString())
  194.             }
  195.  
  196.             console.log("Hello")
  197.  
  198.             var person = {
  199.                 "organizations": [{
  200.                     "name": `${values[0][headerObj[settings["LANDINGPAGE"]]]?.toString()}` || " "
  201.                 }],
  202.                 "names": [{
  203.                     "givenName": `${values[0][headerObj[settings["NAME"]]]?.toString()}` || " ",
  204.                     "familyName": `${values[0][headerObj[settings["NUMBER"]]]?.toString()}` || " ",
  205.                 }],
  206.                 "phoneNumbers": [{
  207.                     "type": "home",
  208.                     "value": values[0][headerObj[settings["PHONE"]]]?.toString() || " "
  209.                 }],
  210.                 "urls": [{
  211.                     "type": "WhatsApp",
  212.                     "value": values[0][headerObj[settings["WAME"]]]?.toString() || " "
  213.                 }],
  214.                 "userDefined": [{
  215.                         "key": "Campaign",
  216.                         "value": values[0][headerObj[settings["CAMPAIGN"]]]?.toString() || " "
  217.                     },
  218.                     {
  219.                         "key": "Join Date",
  220.                         "value": values[0][headerObj[settings["JOIN"]]]?.toString() || " "
  221.                     }
  222.                 ].concat(exitsingUserDefinedPairs),
  223.  
  224.                 "memberships": [{
  225.                     "contactGroupMembership": {
  226.                         "contactGroupResourceName": contactGroupResourceName
  227.                     }
  228.                 }],
  229.             }
  230.         }
  231.         var contactResource = People.People.createContact(person);
  232.         console.log(JSON.stringify(contactResource))
  233.         sheet.getRange(e.range.rowStart, headerObj["Status_S2C"] + 1)
  234.             .setNote(contactResource.resourceName)
  235.             .setValue(`Ok [${settings["CAMPAIGN"]}]`)
  236.             .setBackground("#cfe2f3")
  237.     } catch (error) {
  238.         console.log(error)
  239.         sheet.getRange(e.range.rowStart, headerObj["Status_S2C"] + 1)
  240.             .setNote(error)
  241.             .setValue(`Failed [${settings["CAMPAIGN"]}]`)
  242.             .setBackground("#e6b8af")
  243.     }
  244. }
  245.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement