Page tree

Tartu Ülikooli IT viki

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 11 Next »

Google Workspace for Education on Tartu Ülikoolis juurutamises. See tähendab, et need teenused on kasutatavad ainult osaliselt ja ligipääs on piiratud. Samuti on käesolevad juhendid pidevalt täienemas ning muutumas.

Siin lehel on skripti kood ning juhend, kuidas seda kasutada, et kopeerida isiklikust draivist kaustapuu UT Google Workspace shared drive'i.

Eeldused

  • Kõike järgnevat tuleb teha Google kasutajaga, kellel on vähemalt lugemisõigus kopeeritavale sisule
  • Sellele kasutajale peab olema antud vähemalt Contributor taseme õigused Ülikooli Shared drive kettal
    • Selleks pöördu kasutajatoe/moderaatori poole (vaja üle täpsustada)

Piirangud

  • Varu aega - skript töötab aeglaselt
  • Skript ei tee mingeid duplikaatide ega turvakontrolle ning tehtud ei ole põhjalikke testimisi
    • Kopeerimine ei ole oma olemuselt destruktiivne (originaalid säilivad)
    • Kui samanimeline kaust on juba sihtkohas olemas, luuakse uus kaust
  • Kopeerimise käigus:
    • Kopeeritavale sisule tekib ligipääs kõigile, kellel on ligipääs sihtkaustale/draivile
    • Kõik eelnevad ligipääsud ning õigused kaovad
    • Muutuvad kaustade ning failide lingid
    • Kaovad failide versioonid ning ajalugu
  • Rakenduvad Google drive ning Google API piirangud

Mida teha

  • Mine lehele https://script.google.com
  • Vajuta vasakul üleval nurgas nuppu New project
  • Soovi korral muuda ära projekti nimi
  • Kustuta automatselt genereeritud skripti päis ning kopeeri allolev skript selle asemele
  • Muuda skripti kolme esimest rida:
    • email@domain.xxx → meiliaadress, kuhu saadetakse skripti logid
    • sourcefolderID → kopeeritava kausta ID
    • targetfolderID → sihtkausta või shared draivi ID
      • ID saab aadressiribalt kui avada vastav kaust/draiv (nt: 1KMerSre4WcCl-5AfZIYkeMaG79GPSGIa)
  • Salvesta projekt
  • Vajuta ülemisest menüüst nuppu Run
  • ...
  • Profit

Google Workspace for Education is not yet fully implemented in University of Tartu. This means that the services are available only partially and access is restricted. Furthermore, current manuals are continously being updated and subjects to change.

Kood

Code
function start() {

  //global variables to facilitate logging and email

  //Edit these 3 lines:
  var recipient1 = 'email@domain.xxx';
  PropertiesService.getScriptProperties().setProperty('sourceFolderIdGlobal', 'sourcefolderID');
  PropertiesService.getScriptProperties().setProperty('targetParentFolderIdGlobal', 'targetfolderID');
  
  var recipient2 = recipient1;
  PropertiesService.getScriptProperties().setProperty('StartTime', new Date());   //get timestamp to record the intial execution time

  {
    // Google App Script to the rescue
    // Code adapted from this artcile https://www.labnol.org/code/19979-copy-folders-drive
    // Thank you Amit Agarwal https://github.com/labnol
    // This script will copy all files and folders from the source Folder ID to a Destination Folder ID
    // The Source Folder name will be created in the destination folder
    // If you have been driven insane by Google Drives inability to copy a folder structure from MyDrive to a Shared drive BOOM!
    // 
    // Important note: Enable the Drive service in the script editor https://developers.google.com/apps-script/advanced/drive
     
    var sourceFolderId = PropertiesService.getScriptProperties().getProperty('sourceFolderIdGlobal'); //Folder ID of the folder structure you want to copy
    //Add target folder ID if you want the dest to be somewhere other than the root of Mydrive
    var targetParentFolderId = PropertiesService.getScriptProperties().getProperty('targetParentFolderIdGlobal');  
    
    var sourceFolder = DriveApp.getFolderById(sourceFolderId); //Source Folder
    
    if (targetParentFolderId.length > 0 ) {
      // If the target folder ID has been provided, create the target folder within that folder
      var targetParent = DriveApp.getFolderById(targetParentFolderId); //Parent Folder (target)
      Logger.log( "Create target folder: " + sourceFolder.getName() + " in " + targetParent.getName()); //copy console entry into stored logger
      var target = targetParent.createFolder(sourceFolder.getName()); //Create the source folder we are copying
    } else {
      // If the target folder ID is empty, create the target folder within the root of Mydrive
      Logger.log( "Create target folder in Mydrive: " + sourceFolder.getName()); //copy console entry into stored logger
      Logger.log( "Create target folder in Mydrive: " + sourceFolder.getName()); //copy console entry into stored logger
      var target = DriveApp.createFolder(sourceFolder.getName()); //Create the source folder
    }
    
    //Here we go
    Logger.clear; //Clear stored log data before next execution so we don't keep sending old data
    var recipient = recipient1;  //Destination email address to notify that script has started (for triggered executions)
    var subject = 'MyDrive Copy Log';
    var body = 'MyDrive Copy Started for folder pair: '+sourceFolderId+' to '+targetParentFolderId+"\n This script execution was started at "+ PropertiesService.getScriptProperties().getProperty('StartTime');
    MailApp.sendEmail(recipient, subject, body);

    copyFolder(sourceFolder, target);
    Logger.log("Copy finish"); //copy console entry into stored logger
    
    var recipient = recipient2; //Destination email address to send final completion notice and the logged console data
    var subject = 'MyDrive Copy Log';
    var body = 'MyDrive Copy finished at '+ new Date()+';'+" The execution log is as follows: \n" +Logger.getLog();
    MailApp.sendEmail(recipient, subject, body);
  }
}

function copyFolder(source, target) {
  var folders = source.getFolders();
  var files   = source.getFiles();

  while(files.hasNext()) {
    var file = files.next();
    Logger.log( "Copying file: " + file.getName()); //copy console entry into stored logger
    file.makeCopy(file.getName(), target);
  }

  while(folders.hasNext()) {
    var subFolder = folders.next();
    var folderName = subFolder.getName();
    Logger.log( "Copying folder: " + folderName); //copy console entry into stored logger
    var targetFolder = target.createFolder(folderName);
    copyFolder(subFolder, targetFolder);
  }
}
  • No labels

This page has no comments.