Skip to content

Instantly share code, notes, and snippets.

@mvogelgesang
Created January 22, 2021 20:19
Show Gist options
  • Save mvogelgesang/e8c9e2df612fd533b55b6aed6da8ae4d to your computer and use it in GitHub Desktop.
Save mvogelgesang/e8c9e2df612fd533b55b6aed6da8ae4d to your computer and use it in GitHub Desktop.
Google Drive - Company Copy
/**
* This script reviews specific folders and the files contained within it
* to identify those not owned by your domain and then make subsequent copies
* of those files which will be owned by you.
*
* Getting started:
* Set the COMPANY_DOMAIN
* Set the BASE_FOLDER
*/
var COMPANY_DOMAIN = ""; // eg @mycompany.com
var BASE_FOLDER_ID = "";
var BASE_FOLDER = DriveApp.getFolderById(BASE_FOLDER_ID);
var DATE = Date.now();
var SPREADSHEET = createTrackingSpreadsheet();
//var DEST_FOLDER = DriveApp.
function start() {
traverseFolder(BASE_FOLDER);
}
/**
* Creates a tracking spreadsheet which will contain the ID's of all converted files
*
* @return spreadsheet ID
*/
function createTrackingSpreadsheet() {
var spreadsheet = SpreadsheetApp.create("fileOwnerConversion");
var sheet = spreadsheet.getActiveSheet();
sheet.appendRow(["Old ID","Old Owner Email", "New ID","New Owner Email"]);
return spreadsheet;
}
/**
* Enters ID and ownership information into a spreadsheet for both the new and old files
*
* @oldFileObj - File object
* @newFileObj - File object of the new, domain-owned file
*/
function logConversion(oldFileObj, newFileObj) {
var sheet = SPREADSHEET.getActiveSheet();
sheet.appendRow([oldFileObj.getId(),oldFileObj.getOwner().getEmail(),newFileObj.getId(),newFileObj.getOwner().getEmail()]);
}
/**
* Copies a file which will be owned by the running user
* Logs the conversion in the dedicated spreadsheet
*
* @fileId - Id of the file which will be copied to your domain
*/
function convertFile(fileId) {
var file = DriveApp.getFileById(fileId);
var newFile = file.makeCopy(file.getName(), BASE_FOLDER);
file.setName("DEL - "+file.getName());
logConversion(file, newFile);
}
/**
* Given a Folder, navigates through the entire sub-directory recursively to find files
*
* @folderObj - a Folder object
* @parentFolder (optional) - the Folder object of the parent folder
*/
function traverseFolder(folderObj, parentFolder) {
var folderSharingAccess = folderObj.getSharingAccess();
var folderName = folderObj.getName();
var folderUrl = folderObj.getUrl();
var files = folderObj.getFiles();
while (files.hasNext()) {
var file = files.next();
if (!checkEmailDomain(file)) {
convertFile(file.getFileId());
}
}
parentFolder = folderName;
var subs = folderObj.getFolders();
while (subs.hasNext()) {
traverseFolder(subs.next());
}
}
/**
* Checks an file-owner's e-mail address against the desired COMPANY_DOMAIN
*
* @fileObj - file to evaluate
*
* @return boolean
*/
function checkEmailDomain(fileObj) {
if (fileObj.getOwner().getDomain() == COMPANY_DOMAIN) {
return true;
}
else {
return false;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment