Skip to content

Instantly share code, notes, and snippets.

@leshka12845
Created February 16, 2016 12:49
Show Gist options
  • Save leshka12845/c0b54b981f78ea04cf40 to your computer and use it in GitHub Desktop.
Save leshka12845/c0b54b981f78ea04cf40 to your computer and use it in GitHub Desktop.
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