/*Functions.gs*/
/*######################
AUTHENTICATION FUNCTIONS
######################*/
//authenticate authUser();
function authUser() {
var output = "authenticated";
return HtmlService
.createHtmlOutput("\
\
\
\
\
\
GD Connector:
\
\
Has been successfully authorised to access your data
\
\
\
\
\
\
\
").setTitle('Authenticated');
}
/*######################
DRIVE FUNCTIONS
######################*/
//uploadFile(e.parameter.name,e.parameter.data,e.parameter.mime)
//Note: the webviewer can only handle file sizes of @ 1.2mb (when in base64String), for larger files,
// temporarily change folder permissions to anyone_with_link, step outside the framework and use the web component
//to upload, then back into the framework to reset permissions. For root folder you will need to upload to another folder, then move to root.
function uploadFile(name,data,mime) {
var fileData = Utilities.base64Decode(data, Utilities.Charset.UTF_8);
var blob = Utilities.newBlob(fileData,mime,name);
var upFile = DriveApp.getRootFolder().createFile(blob);
var output = "upFile::" + upFile.getName() + "::" + upFile.getId();
return HtmlService
.createHtmlOutput("
File Uploaded to Root
")
.setTitle('File Uploaded to Root');
}
//uploadFileToFolder(e.parameter.name,e.parameter.data,e.parameter.mime,e.parameter.targetID)
//Note: the webviewer can only handle file sizes of @ 1.2mb (when in base64String), for larger files,
// temporarily change folder permissions to anyone_with_link, step outside the framework and use the web component
//to upload, then back into the framework to reset permissions
function uploadFileToFolder(name,data,mime,targetID) {
var fileData = Utilities.base64Decode(data, Utilities.Charset.UTF_8);
var blob = Utilities.newBlob(fileData,mime,name);
var upFile = DriveApp.getFolderById(targetID).createFile(blob);
var output = "upFileToFolder::" + upFile.getName() + "::" + upFile.getId();
return HtmlService
.createHtmlOutput("
File Uploaded to Folder
")
.setTitle('File Uploaded to Folder');
}
//download a file to the device
//Note: the webviewer can only handle file sizes of @ 1.2mb (when in base64String), for larger files,
// temporarily change file permissions to anyone_with_link, step outside the framework and use the web component
//to download, then back into the framework to reset permissions
function downloadAFile(fileID) {
var mimetype = DriveApp.getFileById(fileID).getMimeType();
if ( (mimetype == 'application/vnd.google-apps.spreadsheet') || (mimetype == 'application/vnd.google-apps.document') || (mimetype == 'application/vnd.google-apps.presentation') || (mimetype == 'application/vnd.google-apps.form') || (mimetype == 'application/vnd.google-apps.script') || (mimetype == 'application/vnd.google-apps.site') || (mimetype == 'application/vnd.google-apps.drawing') || (mimetype == 'application/vnd.google-apps.folder') ) {
return HtmlService
.createHtmlOutput("
Cannot Download this type of File
")
.setTitle('Cannot Download this type of File');
} else {
var file = DriveApp.getFileById(fileID);
var filename = file.getName();
var base64Data = filename + "::" + Utilities.base64Encode(file.getBlob().getBytes());
return HtmlService
.createHtmlOutput("
Downloaded A File
")
.setTitle('File saved to ASD');
}
}
/////createFolder(e.parameter.name);
function createFolder(name) {
var newFolder = DriveApp.createFolder(name);
var output = "folderId::" + newFolder.getName() + "::" + newFolder.getId();
return HtmlService
.createHtmlOutput("
Folder Created " + output + "
")
.setTitle('New Folder Created');
}
/////createFolderInFolder(e.parameter.name,e.parameter.targetID)
function createFolderInFolder(name,targetID) {
var targetFolder = DriveApp.getFolderById(targetID);
var newFolder = targetFolder.createFolder(name);
var output = "folderInFolderId::" + newFolder.getName() +"::"+ newFolder.getId();
return HtmlService
.createHtmlOutput("
Folder Created " + output + "
")
.setTitle('New Folder Created');
}
// Return the name and ID of every folder in the root of the user's Drive.
/////getRootFolders()
function getRootFolders() {
var folders = DriveApp.getRootFolder().getFolders();
rootFolders = [];
while (folders.hasNext()) {
var folder = folders.next();
rootFolders.push([folder.getName(), folder.getId()]);
}
var output = "rootFolders::" + JSON.stringify(rootFolders);
return HtmlService
.createHtmlOutput("
Got Root Folders
" + output + "
")
.setTitle('Got List of Root Folders');
}
// Return the name and ID of every file in the root of the user's Drive.
/////getRootFiles()
function getRootFiles() {
var files = DriveApp.getRootFolder().getFiles();
rootFiles = [];
while (files.hasNext()) {
var file = files.next();
rootFiles.push([file.getName(),file.getId()]);
}
var output = "rootFiles::" + JSON.stringify(rootFiles);
return HtmlService
.createHtmlOutput("
Got Root Files
" + output + "
")
.setTitle('Got List of Root Files');
}
///// return list of folders in a folder
function getListOfFoldersInFolder(targetID) {
folderList = [];
var parentFolder = DriveApp.getFolderById(targetID);
var folders = parentFolder.getFolders();
while (folders.hasNext()) {
var folder = folders.next();
folderList.push([folder.getName(),folder.getId()]);
}
var output = "listFoldersInFolder::" + JSON.stringify(folderList);
return HtmlService
.createHtmlOutput("
Got List of Folders in Folder
" + output + "
")
.setTitle('Got List of Folders in Folder');
}
///// return list of files in a folder
function getListOfFilesInFolder(targetID) {
filesList = [];
var parentFolder = DriveApp.getFolderById(targetID);
var files = parentFolder.getFiles();
while (files.hasNext()) {
var file = files.next();
filesList.push([file.getName(),file.getId()]);
}
var output = "listFilesInFolder::" + JSON.stringify(filesList);
return HtmlService
.createHtmlOutput("
Got List of Files in Folder
" + output + "
")
.setTitle('Got List of Files in Folder');
}
///// return list of files in a folder by type of file
function getFilesInFolderByType(targetID,mtype) {
filesList= [];
var parentFolder = DriveApp.getFolderById(targetID);
var files = parentFolder.getFilesByType(mtype);
while (files.hasNext()) {
var file = files.next();
filesList.push([file.getName(), file.getId()]);
}
var output = "listFilesInFolderByType::" + JSON.stringify(filesList);
return HtmlService
.createHtmlOutput("
Got Files in Folder by Type
" + output + "
")
.setTitle('Got List of Files By Type');
}
/////delete a file by its ID
function deleteFile(targetID) {
DriveApp.getFileById(targetID).setTrashed(true);
return HtmlService
.createHtmlOutput("
File Deleted
")
.setTitle('File Deleted');
}
/////delete a folder by its ID, but only if the folder is empty
function deleteFolder(targetID) {
filesList="";
var parentFolder = DriveApp.getFolderById(targetID);
var files = parentFolder.getFiles();
while (files.hasNext()) {
var file = files.next();
filesList += file.getName();
}
if (filesList == "") {
DriveApp.getFolderById(targetID).setTrashed(true);
return HtmlService
.createHtmlOutput("
")
.setTitle('Folder has Files, NOT Deleted');
}
}
/////
function shareFile(fileId,email,call) {
var message = "File Shared";
eval(`DriveApp.getFileById(fileId).${call}(email)`);
if (call.includes("remove")) {
message = "File unShared";
}
return HtmlService
.createHtmlOutput("
File Shared
")
.setTitle(message);
}
/////
function shareFolder(folderId,email,call) {
var message = "Folder Shared";
eval(`DriveApp.getFolderById(folderId).${call}(email)`);
if (call.includes("remove")) {
message = "Folder unShared";
}
return HtmlService
.createHtmlOutput("
Folder Shared
")
.setTitle(message);
}
/////
function setSharingFile(fileId,access,permission) {
var message = "File Shared";
eval(`DriveApp.getFileById(fileId).setSharing(DriveApp.Access.${access}, DriveApp.Permission.${permission})`);
return HtmlService
.createHtmlOutput("
File Shared
")
.setTitle(message);
}
/////
function setSharingFolder(folderId,access,permission) {
var message = "Folder Shared";
eval(`DriveApp.getFolderById(folderId).setSharing(DriveApp.Access.${access}, DriveApp.Permission.${permission})`);
return HtmlService
.createHtmlOutput("
Folder Shared
")
.setTitle(message);
}
/////
function moveFolderToFolder(folderID, targetID) {
var output = DriveApp.getFolderById(folderID).moveTo(DriveApp.getFolderById(targetID));
return HtmlService
.createHtmlOutput("
Folder Moved
")
.setTitle('Folder Moved');
}
/////
function moveFolderToRoot(folderID) {
var output = DriveApp.getFolderById(folderID).moveTo(DriveApp.getRootFolder());
return HtmlService
.createHtmlOutput("
Folder Moved To Root
")
.setTitle('Folder Moved To Root');
}
/////
function moveFileToFolder(fileID, targetID) {
var output = DriveApp.getFileById(fileID).moveTo(DriveApp.getFolderById(targetID));
return HtmlService
.createHtmlOutput("
File Moved
")
.setTitle('File Moved');
}
/////
function moveFileToRoot(fileID) {
var output = DriveApp.getFileById(fileID).moveTo(DriveApp.getRootFolder());
return HtmlService
.createHtmlOutput("
File moved To Root
")
.setTitle('File Moved To Root');
}
/*######################
SPREADSHEET FUNCTIONS
######################*/
/////createSheet(e.parameter.name)
function createSheet(name) {
var newSpreadsheet = SpreadsheetApp.create(name,20,10);
var output = "sheetId::" + newSpreadsheet.getName() + "::" + newSpreadsheet.getId();
return HtmlService
.createHtmlOutput("
Sheet Created " + output + "
")
.setTitle('New Sheet Created');
}
/////createSheetInFolder(e.parameter.name,e.parameter.targetID)
function createSheetInFolder(name,targetID) {
var newSpreadsheet = SpreadsheetApp.create(name,20,10);
folder=DriveApp.getFolderById(targetID);
var file = DriveApp.getFileById(newSpreadsheet.getId());
folder.addFile(file);
DriveApp.removeFile(file);
var output = "sheetInFolderId::" + newSpreadsheet.getName() + "::" + newSpreadsheet.getId();
return HtmlService
.createHtmlOutput("
Sheet Created " + output + "
")
.setTitle('New Sheet Created');
}
/////get a specified range of data back from a sheet/grid
function getSheetRangeData(sheetID,gridName,data) {
var ss = SpreadsheetApp.openById(sheetID);
var rng = JSON.stringify(ss.getRange(gridName +"!"+ data).getValues());
rng = "sheetRangeData::" + rng.replace(/"([^"]*)'([^"]*)"/g, "$1\\'$2");
return HtmlService
.createHtmlOutput("
Got Range Data from Sheet
")
.setTitle('Got Range Data from Sheet');
}
/////get all contigious data from a specified sheet/grid
function getSheetData (sheetID,gridName) {
var ss = SpreadsheetApp.openById(sheetID);
var sh = ss.getSheetByName(gridName);
var values = JSON.stringify(sh.getDataRange().getValues());
values = "sheetData::" + values.replace(/"([^"]*)'([^"]*)"/g, "$1\\'$2");
return HtmlService
.createHtmlOutput("
Got Data from Sheet
")
.setTitle('Got Data from Sheet');
}
/////get all the grid names from a specified sheet
function getGridNames(sheetID) {
var grids = [];
var ss = SpreadsheetApp.openById(sheetID);
var shs = ss.getSheets();
for (var i=0 ; i