mirror of
https://gitlab.com/NvlblNm/wayfarer.git
synced 2024-09-18 02:24:58 +08:00
184 lines
5.4 KiB
JavaScript
184 lines
5.4 KiB
JavaScript
// Version 2
|
|
|
|
var sheetName = 'WayFarer Planner'
|
|
var scriptProperties = PropertiesService.getScriptProperties()
|
|
|
|
// Run the function initialsetup to create the sheet for storing and retrieving our data
|
|
function initialSetup () {
|
|
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet()
|
|
|
|
var totalReconSheet = activeSpreadsheet.getSheetByName(sheetName);
|
|
// Create the proper sheet if it doesn't already exist. It will be the default active.
|
|
if (totalReconSheet === null) {
|
|
totalReconSheet = activeSpreadsheet.insertSheet(sheetName);
|
|
|
|
// Set appropriate column headers
|
|
totalReconSheet.appendRow(['id','timestamp','title','description','lat','lng','status','nickname','submitteddate','responsedate','candidateimageurl','intellink']);
|
|
// Set column format
|
|
var latColumn = totalReconSheet.getRange("E2:E");
|
|
var lngColumn = totalReconSheet.getRange("F2:F");
|
|
var submitdateColumn = totalReconSheet.getRange("I2:I");
|
|
var responsedateColumn = totalReconSheet.getRange("J2:J");
|
|
|
|
// Plain text
|
|
latColumn.setNumberFormat("@");
|
|
lngColumn.setNumberFormat("@");
|
|
submitdateColumn.setNumberFormat("@");
|
|
responsedateColumn.setNumberFormat("@");
|
|
}
|
|
|
|
// Remove other sheets
|
|
var sheets = activeSpreadsheet.getSheets();
|
|
var i = 0;
|
|
for (i in sheets) {
|
|
var currentsheetName = sheets[i].getName();
|
|
if (currentsheetName !== sheetName) {
|
|
activeSpreadsheet.deleteSheet(sheets[i]);
|
|
}
|
|
}
|
|
|
|
scriptProperties.setProperty('key', activeSpreadsheet.getId());
|
|
}
|
|
|
|
function getSheet() {
|
|
var doc = SpreadsheetApp.openById(scriptProperties.getProperty('key'))
|
|
return doc.getSheetByName(sheetName);
|
|
}
|
|
|
|
function doPost(e) {
|
|
var lock = LockService.getScriptLock();
|
|
lock.tryLock(10000);
|
|
try {
|
|
var sheet = getSheet(sheetName)
|
|
|
|
var allValues = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues();
|
|
var headers = allValues[0];
|
|
var nextRow = sheet.getLastRow() + 1
|
|
|
|
var isUpdate = false;
|
|
var originalId = null;
|
|
var newRow = headers.map(function(header) {
|
|
switch (header) {
|
|
case 'timestamp':
|
|
return new Date();
|
|
break;
|
|
case 'id':
|
|
if (e.parameter[header] !== undefined && e.parameter[header] !== '') {
|
|
isUpdate = true;
|
|
originalId = e.parameter[header];
|
|
return e.parameter[header];
|
|
}
|
|
return uuid();
|
|
break;
|
|
default:
|
|
return e.parameter[header];
|
|
break;
|
|
}
|
|
});
|
|
|
|
if (isUpdate) {
|
|
var obj = allValues.map(function(values) {
|
|
return headers.reduce(function(o, k, i) {
|
|
o[k] = values[i];
|
|
return o;
|
|
}, {});
|
|
});
|
|
|
|
// loop through all the data
|
|
var currentRowData = '';
|
|
obj.forEach(function(row, rowIdx){
|
|
// Find id and rownumber of existing item
|
|
if (row.id === originalId){
|
|
nextRow = rowIdx + 1;
|
|
currentRowData = row;
|
|
}
|
|
});
|
|
|
|
if (currentRowData != '') {
|
|
newRow[7] = currentRowData.nickname;
|
|
}
|
|
|
|
var newStatus = e.parameter['status'];
|
|
if (newStatus == 'delete') {
|
|
sheet.deleteRow(nextRow);
|
|
|
|
return ContentService
|
|
.createTextOutput(JSON.stringify({ 'result': 'deleted' }))
|
|
.setMimeType(ContentService.MimeType.JSON);
|
|
}
|
|
}
|
|
|
|
// Auto add intel link
|
|
newRow[11] = 'https://intel.ingress.com/intel/?z=19&ll=' + newRow[4] + ',' + newRow[5];
|
|
// Add or update;
|
|
sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow]);
|
|
|
|
var resultArray = [newRow];
|
|
var resultObject = resultArray.map(function(values) {
|
|
return headers.reduce(function(o, k, i) {
|
|
o[k] = values[i];
|
|
return o;
|
|
}, {});
|
|
});
|
|
|
|
return ContentService
|
|
.createTextOutput(JSON.stringify(resultObject[0]))
|
|
.setMimeType(ContentService.MimeType.JSON)
|
|
|
|
} catch (e) {
|
|
return ContentService
|
|
.createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
|
|
.setMimeType(ContentService.MimeType.JSON)
|
|
}
|
|
finally {
|
|
lock.releaseLock()
|
|
}
|
|
}
|
|
|
|
function doGet (request) {
|
|
var lock = LockService.getScriptLock()
|
|
lock.tryLock(10000)
|
|
try {
|
|
var sheet = getSheet();
|
|
|
|
var allValues = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getValues();
|
|
if (allValues.length > 1) {
|
|
var header = allValues[0];
|
|
var obj = allValues.map(function(values) {
|
|
return header.reduce(function(o, k, i) {
|
|
o[k] = values[i];
|
|
return o;
|
|
}, {});
|
|
});
|
|
|
|
// First row contains the headers themself. Remove it from the array.
|
|
if (obj.length > 0) {
|
|
obj.shift();
|
|
}
|
|
|
|
return ContentService
|
|
.createTextOutput(JSON.stringify(obj))
|
|
.setMimeType(ContentService.MimeType.JSON)
|
|
}
|
|
|
|
return ContentService
|
|
.createTextOutput(JSON.stringify([]))
|
|
.setMimeType(ContentService.MimeType.JSON)
|
|
|
|
}
|
|
|
|
catch (e) {
|
|
return ContentService
|
|
.createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
|
|
.setMimeType(ContentService.MimeType.JSON)
|
|
}
|
|
|
|
finally {
|
|
lock.releaseLock()
|
|
}
|
|
}
|
|
|
|
function uuid() {
|
|
return Utilities.getUuid();
|
|
}
|