Created
January 22, 2021 20:19
-
-
Save mvogelgesang/e8c9e2df612fd533b55b6aed6da8ae4d to your computer and use it in GitHub Desktop.
Google Drive - Company Copy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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