Created
August 6, 2013 14:11
-
-
Save rschiang/6164824 to your computer and use it in GitHub Desktop.
SITCON 2013 行政組自動化管理專案。
This file contains hidden or 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
/* | |
* Author: Poren Chiang <[email protected]> | |
* 這程式會試圖清查所有未交割所有權的文件。 | |
*/ | |
var outputSheetId = "RS0123456789SITCONabcdefghijklmnopqrstuvwxyz"; // 輸出試算表的位置 | |
var rootFolderId = "SITCON2013abcdefghijklmnopqr"; // 根資料夾的位置 | |
var correctEmail = "[email protected]"; // 檔案正確的擁有者 | |
var closed = []; | |
var currentSheet; | |
function main() { | |
var spreadsheet = SpreadsheetApp.openById(outputSheetId); | |
currentSheet = spreadsheet.insertSheet(new Date().toString()); | |
enumerateFolder(rootFolderId, ""); | |
} | |
function indexOf(array, obj) { | |
for (var i = 0; i < array.length; i++) | |
if (array[i] == obj) | |
return i; | |
return -1; | |
} | |
function enumerateFolder(id, path) { | |
// Prevent re-entry | |
if (indexOf(closed, id) >= 0) | |
return; | |
closed.push(id); | |
Logger.log("Entering " + path); | |
// List folders | |
var folder = DriveApp.getFolderById(id); | |
var files = folder.getFiles(); | |
var file; | |
while (files.hasNext()) { | |
file = files.next(); | |
try { | |
if (file.getSize() > 0) continue; // Blobs cannot change owner | |
if (file.getAccess(correctEmail) == DriveApp.Permission.OWNER) continue; | |
} | |
catch (e) {} | |
var docFile = DocsList.getFileById(file.getId()); | |
var fileName, fileOwner; | |
try { fileName = file.getName(); } | |
catch (e) { fileName = file.getId(); } | |
try { fileOwner = docFile.getOwner().getEmail(); } | |
catch (e) {} | |
if (fileOwner && (fileOwner.indexOf("gmail.com") < 0)) continue; | |
writeToSheet({ "name": fileName, "path": path, "owner": fileOwner }); | |
} | |
var subfolders = folder.getFolders(); | |
var subfolder; | |
while(subfolders.hasNext()) { | |
subfolder = subfolders.next(); | |
var isOwner = false; | |
try { | |
isOwner = (subfolder.getAccess(correctEmail) == DriveApp.Permission.OWNER); | |
} | |
catch (e) {} | |
if (!isOwner) { | |
var docFile = DocsList.getFolderById(subfolder.getId()); | |
var fileName, fileOwner; | |
try { fileName = subfolder.getName(); } | |
catch (e) { fileName = subfolder.getId(); } | |
try { fileOwner = docFile.getOwner().getEmail(); } | |
catch (e) {} | |
if (fileOwner && (fileOwner.indexOf("gmail.com") < 0)) continue; | |
writeToSheet({ "name": fileName, "path": path, "owner": fileOwner }); | |
} | |
enumerateFolder(subfolder.getId(), path + "/" + subfolder.getName()); | |
} | |
} | |
function writeToSheet(item) { | |
currentSheet.appendRow([item["name"], item["path"], item["owner"]]); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment