View difference between Paste ID: ZT3T5LyL and 6cWdH8WT
SHOW: | | - or go back to the newest paste.
1
/**
2-
Ingress Portal Submission Tracker fog Google Sheets - ver 1.2 (unknown author)
2+
Ingress Portal Submission Tracker fog Google Sheets - ver 1.5 (unknown author)
3
based on http://pastebin.com/6cWdH8WT
4
v1.3: add portal number counter collumn; changed search filter to be inclusive of legacy e-mails from [email protected] and [email protected]
5
v1.4: add link to Intel map for NIA emails which include the link
6
v1.5: adjust search query to better detect relevant e-mails
7
8
Installation:
9
- start new google docs spreadsheet
10
- Tools -> Script editor
11
- paste the whole code, save and close the editor and spreadsheet
12
- open spreadsheet again 
13
- next to Help menu you will see "Ingress Portals" menu
14
- Ingress Portals -> Update shreadsheet
15
16-
 var threads = GmailApp.search("ingress portal (Submitted|Live|Rejected|Duplicate): "+"[email protected]");
16+
17
**/
18
19
function ingressSubmissionsTracker() {
20
 var threads = GmailApp.search("subject:(ingress portal (Submitted|Live|Rejected|Duplicate)) "+"@google.com");
21
 var sheet   = SpreadsheetApp.getActiveSheet();
22
 var ss      = SpreadsheetApp.getActiveSpreadsheet()
23
 ss.toast("Scanning mailbox for Niantic messages. Please wait..", "Scan Started", -1); 
24
 var rowBackgrounds = {
25
   'Live':'lightgreen',
26-
 sheet.appendRow(["Portal Name","Date Submitted","Date Resolved","Monkey Speed","Age","Link","Status"]);
26+
27-
 sheet.setColumnWidth(1, 250);
27+
28-
 sheet.setColumnWidth(2, 120);
28+
29
 }
30
 var rownum  = 1;
31
 sheet.clear();
32
 sheet.appendRow(["Thread ID","Portal Name","Date Submitted","Date Resolved","Monkey Speed","Age","Email Link","Status","Location"]);
33
 sheet.setColumnWidth(1, 90);  
34
 sheet.setColumnWidth(2, 250);
35
 sheet.setColumnWidth(3, 120);
36
 sheet.setColumnWidth(4, 120);
37
 sheet.setFrozenRows(1);
38
 var portalStatus = {};
39
 var portalLink = {};
40-
   var sheetLink = '=HYPERLINK("' + link + '" ; "Link")';
40+
41
 for (var i = 0; i < threads.length; i++) {
42
   var header = threads[i].getFirstMessageSubject();
43
   Logger.log("header = " + header);
44
   var date = threads[i].getLastMessageDate();
45
   Logger.log("date = " + date);   
46
   var link = threads[i].getPermalink();
47
   Logger.log("link = " + link);      
48
   var portalState = header.split(":")[0].split(" ")[2];
49
   Logger.log("portalState = " + portalState);
50
   var portalName = header.split(": ")[1];
51
   Logger.log("portalName = " + portalName);
52
   var portalKey = portalName.toUpperCase();
53
   var sheetLink = '=HYPERLINK("' + link + '" ; "Link")';                                  
54-
     sheet.appendRow([portalName, date, resolveDate[portalKey],
54+
55-
                     "=IF(NOT(ISBLANK(C"+rownum+"));INT(C"+rownum+"-B"+rownum+");)",
55+
56-
                     "=INT(NOW()-B"+rownum+")",
56+
57-
                     sheetLink, portalStatus[portalKey]]);
57+
58-
     var lastRow = sheet.getRange("A"+rownum+":G"+rownum);
58+
59
   }
60
   //If portal Live, try to get Intel coordinates
61
   Logger.log(portalName + "; portalState = " + portalState);
62
   if (portalState == 'Live'){
63
     if (!(portalKey in portalLink)){
64
       //get messages properly and enumerate
65
       //var NIAmessages = threads[i].getMessages();
66
       //threads[x].getMessages()[0].getFrom();
67
       //blah blah blah .. or just make a dummy assumption about targetting the first message in a thread (Gmail doesn't seem to thread these properly)
68
       var NIAmsg = threads[i].getMessages()[0].getBody();
69
       //extract URL
70
       portalLink[portalKey] = '=HYPERLINK(' + getLink(NIAmsg)+ '; "Intel Link")';
71
       //portalLink[portalKey] = '=HYPERLINK("' + 'http://ingress.com/intel' + '" ; "Intel Link")';
72
       //Logger.log("portalKey link = " + portalLink[portalKey]);
73
     }  
74
   }  
75
   if (portalState != "Submitted"){
76
     portalStatus[portalKey] = portalState;
77
     resolveDate[portalKey] = date;
78
   }
79
   // populate spreadsheet only when we hit Submitted message
80
   if (portalState == 'Submitted') {
81
     rownum++;
82
     sheet.appendRow([i,portalName, date, resolveDate[portalKey],
83
                     "=IF(NOT(ISBLANK(D"+rownum+"));INT(D"+rownum+"-C"+rownum+");)",
84
                     "=INT(NOW()-C"+rownum+")",
85
                     sheetLink, portalStatus[portalKey],portalLink[portalKey]]);
86
     var lastRow = sheet.getRange("B"+rownum+":I"+rownum);
87
     lastRow.setBackground(rowBackgrounds[portalStatus[portalKey]]);
88
   }
89
 }
90
 ss.toast("Processed " + rownum + " portals.", "Scanning Done", 10);  
91
}
92
93
94
 function getLink(str) {
95
   //check if href is found then do it.
96
   // if
97
   //or just do it the dummy way...
98
   var link = str.split('<a href=')[1].split('target="_blank">')[0];
99
   return link;  
100
 }
101
102
/**
103
 * Adds a custom menu to the active spreadsheet, containing a single menu item
104
 * for invoking the ingressSubmissionsTracker() function specified above.
105
 * The onOpen() function, when defined, is automatically invoked whenever the
106
 * spreadsheet is opened.
107
 * For more information on using the Spreadsheet API, see
108
 * https://developers.google.com/apps-script/service_spreadsheet
109
 */
110
function onOpen() {
111
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
112
  var entries = [{
113
    name : "Update spreadsheet",
114
    functionName : "ingressSubmissionsTracker"
115
  }];
116
  spreadsheet.addMenu("Ingress Portals", entries);
117
};