|
| 1 | +/* |
| 2 | +Copyright (c) 2020 University of Fukui. All rights reserved. |
| 3 | +Please see the license.gs for the copyright licensing conditions attached to this codebase, including copies of the licenses concerned. |
| 4 | +*/ |
| 5 | + |
| 6 | +var logsheet = SpreadsheetApp.getActive().getSheetByName("log"); |
| 7 | +var url = PropertiesService.getScriptProperties().getProperty('root_folder_url'); |
| 8 | + |
| 9 | +function onOpen() { |
| 10 | + SpreadsheetApp |
| 11 | + .getActiveSpreadsheet() |
| 12 | + .addMenu('カスタムメニュー', [ |
| 13 | + {name: '連携する', functionName: 'setProperties'}, |
| 14 | + {name: '編集権限登録', functionName: 'main'} |
| 15 | + ]); |
| 16 | +} |
| 17 | + |
| 18 | +function setProperties() { |
| 19 | + var rootFolderUrl = Browser.inputBox('ルートフォルダのURLを入力してください。'); |
| 20 | + PropertiesService.getScriptProperties().setProperty('root_folder_url', rootFolderUrl); |
| 21 | +} |
| 22 | + |
| 23 | +function main(){ |
| 24 | + var date = new Date(); |
| 25 | + logsheet.appendRow([Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss'), "start"]); |
| 26 | + |
| 27 | + var ss = SpreadsheetApp.getActive(); |
| 28 | + var editortable = ss.getSheetByName("担当教員一覧").getDataRange().getValues(); |
| 29 | + var IDsheet = ss.getSheetByName("対象科目ID"); |
| 30 | + var rootfolder; |
| 31 | + try{ |
| 32 | + rootfolder = DriveApp.getFolderById(url.match(/[^/]+$/g)[0]); |
| 33 | + }catch(e){ |
| 34 | + Browser.msgBox("初期設定シートにルートフォルダURLを記載ください"); |
| 35 | + return; |
| 36 | + } |
| 37 | + |
| 38 | + for(var i = editortable.length-1; 0 < i; i--){ |
| 39 | + var err = false; |
| 40 | + |
| 41 | + if(editortable[i][3] != ""){ |
| 42 | + continue; |
| 43 | + } |
| 44 | + if(editortable[i][2] == ""){ |
| 45 | + continue; |
| 46 | + } |
| 47 | + |
| 48 | + var grade = editortable[i][0]; |
| 49 | + var subject = editortable[i][1]; |
| 50 | + |
| 51 | + var gradefolders = rootfolder.getFoldersByName(grade + "年生"); |
| 52 | + var gradefolder; |
| 53 | + if(gradefolders.hasNext()){ |
| 54 | + gradefolder = gradefolders.next(); |
| 55 | + }else{ |
| 56 | + Browser.msgBox("正しい学年を入力してください"); |
| 57 | + return; |
| 58 | + } |
| 59 | + |
| 60 | + var studentfolders = gradefolder.getFoldersByName("学生"); |
| 61 | + var studentfolder; |
| 62 | + if(studentfolders.hasNext()){ |
| 63 | + studentfolder = studentfolders.next(); |
| 64 | + }else{ |
| 65 | + Browser.msgBox("学年フォルダ配下が想定しているフォルダ構造ではありません"); |
| 66 | + return; |
| 67 | + } |
| 68 | + |
| 69 | + var teacherfolders = gradefolder.getFoldersByName("教員"); |
| 70 | + var teacherfolder; |
| 71 | + if(teacherfolders.hasNext()){ |
| 72 | + teacherfolder = teacherfolders.next() |
| 73 | + }else{ |
| 74 | + Browser.msgBox("学年フォルダ配下が想定しているフォルダ構造ではありません"); |
| 75 | + return; |
| 76 | + } |
| 77 | + |
| 78 | + var subjectfolders = studentfolder.getFoldersByName(subject); |
| 79 | + var subjectfolder; |
| 80 | + if(subjectfolders.hasNext()){ |
| 81 | + subjectfolder = subjectfolders.next(); |
| 82 | + }else{ |
| 83 | + Browser.msgBox("正しい科目名を入力してください"); |
| 84 | + return; |
| 85 | + } |
| 86 | + |
| 87 | + var minutepaperfolders = teacherfolder.getFoldersByName(subject); |
| 88 | + var minutepaperfolder; |
| 89 | + |
| 90 | + if(minutepaperfolders.hasNext()){ |
| 91 | + minutepaperfolder = minutepaperfolders.next() |
| 92 | + }else{ |
| 93 | + Browser.msgBox("正しい科目名を入力してください"); |
| 94 | + return; |
| 95 | + } |
| 96 | + |
| 97 | + try { |
| 98 | + Drive.Permissions.insert({ |
| 99 | + 'role': 'writer', |
| 100 | + 'type': 'user', |
| 101 | + 'value': editortable[i][2] |
| 102 | + }, subjectfolder.getId(), { |
| 103 | + 'sendNotificationEmails': 'false' |
| 104 | + }); |
| 105 | + logsheet.appendRow(["suc", subjectfolder.getId(), editortable[i][2]]); |
| 106 | + |
| 107 | + } |
| 108 | + catch (e) { |
| 109 | + logsheet.appendRow(["err", subjectfolder.getId(), editortable[i][2]]); |
| 110 | + err = true; |
| 111 | + } |
| 112 | + |
| 113 | + try { |
| 114 | + Drive.Permissions.insert({ |
| 115 | + 'role': 'writer', |
| 116 | + 'type': 'user', |
| 117 | + 'value': editortable[i][2] |
| 118 | + }, minutepaperfolder.getId(), { |
| 119 | + 'sendNotificationEmails': 'false' |
| 120 | + }); |
| 121 | + logsheet.appendRow(["suc", minutepaperfolder.getId(), editortable[i][2]]); |
| 122 | + |
| 123 | + } |
| 124 | + catch (e) { |
| 125 | + logsheet.appendRow(["err", minutepaperfolder.getId(), editortable[i][2]]); |
| 126 | + err = true; |
| 127 | + } |
| 128 | + |
| 129 | + if(err){ |
| 130 | + ss.getSheetByName("担当教員一覧").getRange(i+1, 4).setValue("NG"); |
| 131 | + }else{ |
| 132 | + ss.getSheetByName("担当教員一覧").getRange(i+1, 4).setValue("OK"); |
| 133 | + } |
| 134 | + } |
| 135 | + |
| 136 | + var date = new Date(); |
| 137 | + logsheet.appendRow([Utilities.formatDate( date, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss'), "end"]); |
| 138 | + SpreadsheetApp.flush(); |
| 139 | + |
| 140 | +} |
0 commit comments