Created
February 16, 2016 12:49
-
-
Save leshka12845/c0b54b981f78ea04cf40 to your computer and use it in GitHub Desktop.
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
cache = CacheService.getPublicCache(); | |
ss = SpreadsheetApp.getActiveSpreadsheet(); | |
tsheet = ss.getSheets()[0]; | |
userslist = []; | |
n = 1; | |
r = 0; | |
deep = ''; | |
function fillSpreadsheet(){ | |
tsheet.clear(); | |
var folder = DriveApp.getRootFolder(); | |
//var folder = DriveApp.getFolderById('0B4v1Xdm8NczzcmkxRXI1YUhqOEk'); | |
Rec(folder, ''); | |
} | |
function Rec(folder, deep) { | |
if (deep.length/2 > 4) { | |
return; | |
} | |
n++; | |
deep = deep + '..'; | |
var cell = tsheet.getRange(n, 1); | |
cell.setValue(deep + folder.getName()) ; | |
cell = tsheet.getRange(n, 2); | |
cell.setValue(folder.getId()) ; | |
var k = 0; | |
setRights(folder.getViewers(), n, 'r'); | |
setRights(folder.getEditors(), n, 'e'); | |
setRights([folder.getOwner()], n, 'o'); | |
var folders = getSortedFolders(folder.getFolders()) | |
for(var i=0; i<folders.length; i++) { | |
Rec(folders[i], deep /*prefix + '.' + (i+1)*/); | |
} | |
deep = deep.substr(0, deep.length-3); | |
} | |
function getSortedFolders(folderslist) { | |
var folderName = []; | |
var tmp = []; | |
while (folderslist.hasNext()) { | |
var nextfolder = folderslist.next(); | |
//tmp.push(nextfolder.getId()); | |
tmp.push(nextfolder); | |
folderName.push(nextfolder.getName()); | |
} | |
folderName.sort(); | |
var result = []; | |
for(var i=0; i<folderName.length; i++) { | |
var j = 0 | |
while ((j<tmp.length) && (folderName[i] != tmp[j].getName())) { | |
j++ | |
} | |
result.push(tmp[j]);//.getId()); | |
} | |
return result; | |
} | |
function setRights(list, row, access) { | |
for (var i = 0; i<list.length; i++) { | |
var position = getUserPosition(list[i].getEmail(), userslist); | |
var cell = tsheet.getRange(row, position); | |
cell.setValue(access); | |
} | |
} | |
function getUserPosition(searchValue, searchArray) { | |
for (var i = 0; i < searchArray.length; i++) { | |
if (searchValue == searchArray[i]) { | |
return i+3; | |
} | |
} | |
searchArray.push(searchValue); | |
var cell = tsheet.getRange(1, i+3); | |
cell.setValue(searchValue); | |
return i+3; | |
} | |
//// | |
function onEdit(event) { | |
var sheet = event.source.getActiveSheet(); | |
var actRng = event.source.getActiveRange(); | |
var index = actRng.getRowIndex(); | |
var cindex = actRng.getColumnIndex(); | |
var folderid = sheet.getRange(index, 2).getValue(); | |
var usermail = sheet.getRange(1, cindex).getValue(); | |
var access = folderid + ';' + usermail + ';' + event.value + '|'; | |
// var lastCell = sheet.getRange(index+1,cindex); | |
var cashed = cache.get('access'); | |
if (!!cashed) { | |
access = cashed + access; | |
cache.remove('access'); | |
} | |
cache.put('access', access); | |
// var c = cache.get('access'); | |
// lastCell.setValue(c); | |
} | |
function onOpen() { | |
var ss = SpreadsheetApp.getActiveSpreadsheet(); | |
var menu = [{name: "Загрузить данные", functionName: "fillSpreadsheet"},{name: "Раздать доступ", functionName: "setAccess"}]; | |
ss.addMenu("Доступ", menu); | |
} | |
function setAccess () { | |
/* var cell = tsheet.getRange(3, 11); */ | |
var accessarray = cache.get('access').split('|'); | |
cache.remove('access'); | |
for (var i=0; i<accessarray.length-1; i++) { | |
var values = accessarray[i].split(';'); | |
var folder = DriveApp.getFolderById(values[0]); | |
if (isUserInArray (values[1], folder.getEditors())) { | |
folder.removeEditor(values[1]); | |
} | |
if (isUserInArray (values[1], folder.getViewers())) { | |
folder.removeViewer(values[1]); | |
} | |
if (values[2] == 'e') { | |
folder.addEditor(values[1]); | |
} | |
if (values[2] == 'r'){ | |
folder.addViewer(values[1]); | |
} | |
} | |
} | |
function isUserInArray (searchValue, searchArray) { | |
for (var i = 0; i < searchArray.length; i++) { | |
if (searchValue == searchArray[i].getEmail()) { | |
return true; | |
} | |
} | |
return false | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment