Skip to content

Commit

Permalink
Merge pull request #38 from Scouterna/utv
Browse files Browse the repository at this point in the history
Utv
  • Loading branch information
webbmastern authored Jan 30, 2021
2 parents 8c03835 + 16e80ba commit ffb69b8
Show file tree
Hide file tree
Showing 17 changed files with 2,430 additions and 332 deletions.
57 changes: 1 addition & 56 deletions Anvandare.gs
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,6 @@
* @website https://github.com/Scouterna
*/

/**
* Anropa denna funktion om du vill synkronisera både användare och grupper direkt efter varandra
*/
function AnvandareOchGrupper() {
Anvandare();
Grupper();
}


/*
* Huvudfunktion för att hantera synkronisering av användarkonton med Scoutnet
Expand Down Expand Up @@ -277,7 +269,7 @@ function checkIfEmailExists(email) {
*/
function updateAccount(member, useraccount, orgUnitPath) {

if (member.mobile_phone) { //För distrikt som hämtar attribut via e-postlist-api:et då det är annat namn där
if ("district" == organisationType) { //För distrikt som hämtar attribut via e-postlist-api:et då det är annat namn där
member.contact_mobile_phone = member.mobile_phone;
}

Expand Down Expand Up @@ -569,53 +561,6 @@ function getScoutleaders(allMembers) {
}


/*
* Hämta lista över alla medlemmar
*
* @returns {Object[]} allMembers - Lista med medlemsobjekt för alla medlemmar i kåren
*/
function fetchScoutnetMembers() {

var url = 'https://' + scoutnet_url + '/api/' + organisationType + '/memberlist?id=' + groupId + '&key=' + api_key_list_all + '&pretty=1';
var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});
//Logger.log(response);

var json = response.getContentText();
var data = JSON.parse(json);

var medlemmar = data.data;
var allMembers = [];

//Logger.log(medlemmar);
for (x in medlemmar) {
var medlem = medlemmar[x];

var variabel_lista_not_lowercase = ['member_no', 'first_name', 'last_name', 'ssno', 'note', 'date_of_birth', 'status',
'created_at', 'confirmed_at', 'group', 'unit', 'patrol', 'unit_role', 'group_role',
'sex', 'address_co', 'address_1', 'address_2' , 'address_3', 'postcode', 'town',
'country', 'contact_mobile_phone', 'contact_home_phone', 'contact_mothers_name',
'contact_mobile_mum', 'contact_telephone_mum', 'contact_fathers_name', 'contact_mobile_dad',
'contact_telephone_dad', 'prev_term', 'prev_term_due_date', 'current_term',
'current_term_due_date', 'avatar_updated', 'avatar_url'];

//Dessa attributvärden ska användas som gemener för bättre jämförelser
var variabel_lista_lowercase = ['email', 'contact_email_mum', 'contact_email_dad', 'contact_alt_email', 'extra_emails'];

var member = setMemberFields(medlem, variabel_lista_not_lowercase, variabel_lista_lowercase);

//Logger.log("MEMBER print object " + member);
//Logger.log("%s %s, Medlem %s, Mobil %s",member.first_name, member.last_name, member.member_no, member.contact_mobile_phone); //member.member_no + " " + member.first_name + " " + member.last_name);
//Logger.log(member.date_of_birth + " " + member.confirmed_at + " " + member.unit);
//Logger.log(member.unit_role + " " + member.group_role + " " + member.email);
//Logger.log(member.email_mum + " " + member.email_dad + " " + member.alt_email);
allMembers.push(member);

}
//Logger.log("FETCH MEMBERS print object " + allMembers);
return allMembers;
}


/*
* Testfunktion för att lista alla Googlekonton som finns i underorganisationen "Scoutnet"
* Max 200 stycken
Expand Down
225 changes: 115 additions & 110 deletions Gemensamma_funktioner.gs
Original file line number Diff line number Diff line change
Expand Up @@ -10,112 +10,8 @@
function Allt() {

Anvandare();
Grupper();
}


/**
* @todo
*/
function GetAttachments(inputString) {

var filelist = inputString.split(",");

var files_to_attach = [];

for (var i = 0; i < filelist.length; i++) {
var fil = filelist[i] = filelist[i].trim();

var file = getFileById(fil);
if (!file) {
file = getFileByName(fil);
if(!file) {
Logger.log(fil + " kunde inte hittas på Google Drive, kontrollera indata och behörighet");
//return false; //Gör detta så att man kan ändra färg om något är fel
}
}

if (file) { //Denna fil ska läggas till
files_to_attach.push(file);
Logger.log(file + " finns");
}
}
return files_to_attach;
}


/*
* Returerna Google Drive fil om fil med namnet är tillgänglig
* @todo
*/
function getFileByName(namn){

var file = DriveApp.getFilesByName(namn);

if (file.hasNext()) {
return file.next();
}
return false;
}


/*
* Returnera åldern på en medlem
* @todo
*/
function getAge(medlem) {

var today = new Date();

//today.setDate(-60); //Test, sätt dag i månaden som dagens datum
var ms_today = today.getTime();

var medlem_born = convertStringToDate(medlem.date_of_birth); //Todays date as a Date object
var ms_medlem_born = medlem_born.getTime();

Logger.log("Dagens datum " + ms_today);
Logger.log("Födelsetid " + ms_medlem_born);

var ms = ms_today - ms_medlem_born;
today.setTime(ms);
var age = today.getFullYear() - 1970;
Logger.log("Ålder " + age);
return age;
}


/*
* Konvertera textsträng på formen ÅÅÅÅ-MM-DD till ett datumobjekt
*/
function convertStringToDate(inputString) {

Logger.log(inputString);
var yyyy = inputString.substring(0, 4);
var mm = inputString.substring(5, 7)-1; //January is 0!
var dd = inputString.substring(8, 10);

Logger.log("YYYY " + yyyy);
Logger.log("mm " + mm);
Logger.log("dd " + dd);

var myDate = new Date();
myDate.setFullYear(yyyy);
myDate.setMonth(mm);
myDate.setDate(dd);

return myDate;
}


/*
* Returerna Google Drive fil om fil med id är tillgänglig
*/
function getFileById(id){
try {
return DriveApp.getFileById(id);
} catch (err) {
return false;
}
Grupper();
Medlemslistor();
}


Expand Down Expand Up @@ -177,9 +73,8 @@ function fetchScoutnetMembersMultipleMailinglists(scoutnet_list_id, cell_scoutne
Logger.log(typeof scoutnet_list_id);

var allMembers = [];
scoutnet_list_id = scoutnet_list_id.toString(); //Vi gör om till string för att metoden replace ska fungera
scoutnet_list_id = scoutnet_list_id.replace(/\(.*?\)/g, ''); //Ta bort kommentarer inom parentes så de inte kommer med
scoutnet_list_id = scoutnet_list_id.replace(/\s+/g, ''); //Ta bort tomma mellanrum

scoutnet_list_id = getCleanString(scoutnet_list_id);

Logger.log("Innan splitt " + scoutnet_list_id);
var tmp_id = scoutnet_list_id.split(",");
Expand Down Expand Up @@ -547,6 +442,116 @@ function getEmailListSyncOption(member, synk_option, boolGoogleAccounts) {
}


/*
* Hämta lista över alla medlemmar
*
* @returns {Object[]} allMembers - Lista med medlemsobjekt för alla medlemmar i kåren
*/
function fetchScoutnetMembers() {

var url = 'https://' + scoutnet_url + '/api/' + organisationType + '/memberlist?id=' + groupId + '&key=' + api_key_list_all + '&pretty=1';
var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});
//Logger.log(response);

var json = response.getContentText();
var data = JSON.parse(json);

var medlemmar = data.data;
var allMembers = [];

//Logger.log(medlemmar);
for (x in medlemmar) {
var medlem = medlemmar[x];

var variabel_lista_not_lowercase = ['member_no', 'first_name', 'last_name', 'ssno', 'note', 'date_of_birth', 'status',
'created_at', 'confirmed_at', 'group', 'unit', 'patrol', 'unit_role', 'group_role',
'sex', 'address_co', 'address_1', 'address_2' , 'address_3', 'postcode', 'town',
'country', 'contact_mobile_phone', 'contact_home_phone', 'contact_mothers_name',
'contact_mobile_mum', 'contact_telephone_mum', 'contact_fathers_name', 'contact_mobile_dad',
'contact_telephone_dad', 'contact_leader_interest', 'prev_term', 'prev_term_due_date',
'current_term', 'current_term_due_date', 'avatar_updated', 'avatar_url'];

//Dessa attributvärden ska användas som gemener för bättre jämförelser
var variabel_lista_lowercase = ['email', 'contact_email_mum', 'contact_email_dad', 'contact_alt_email', 'extra_emails'];

var member = setMemberFields(medlem, variabel_lista_not_lowercase, variabel_lista_lowercase);

//Logger.log("MEMBER print object " + member);
//Logger.log("%s %s, Medlem %s, Mobil %s",member.first_name, member.last_name, member.member_no, member.contact_mobile_phone); //member.member_no + " " + member.first_name + " " + member.last_name);
//Logger.log(member.date_of_birth + " " + member.confirmed_at + " " + member.unit);
//Logger.log(member.unit_role + " " + member.group_role + " " + member.email);
//Logger.log(member.email_mum + " " + member.email_dad + " " + member.alt_email);
allMembers.push(member);

}
//Logger.log("FETCH MEMBERS print object " + allMembers);
return allMembers;
}


/*
* Tar reda på vilka rader i kalkylarket som ska synkroniseras
*
* @param {string} start - önskad startrad att synkronisera från
* @param {string} slut - önskad slutrad att synkronisera till
* @param {string} maxRowNumer - maximalt radnummer som går att synkronisera
*
* @returns {Object} - Objekt med start- och slutrad att synkronisera
*/
function findWhatRowsToSync(start, slut, maxRowNumber) {

var minRowStart = 3;

if (typeof start ==='undefined' || start < minRowStart) {
start = minRowStart;
}
if (typeof slut ==='undefined' || slut > maxRowNumber) {
slut = maxRowNumber;
}

var rowsToSync = {
"start": start,
"slut": slut
};
return rowsToSync;
}


/**
* Tar bort kommentarer inom parens samt tomrum i
* angiven variabel
*
* @param {string} input - en variabel
*
* @returns {string} - en textsträng utan kommentarer eller mellanrum
*/
function getCleanString(input) {

input = input.toString(); //Vi gör om till string för att metoden replace ska fungera
input = input.replace(/\(.*?\)/g, ''); //Ta bort kommentarer inom parentes så de inte kommer med
input = input.replace(/\s+/g, ''); //Ta bort tomma mellanrum

return input;
}


/*
* Ta bort rader från kalkylarket
*
* @param {Object} sheet - Googleobjekt
* @param {numbers[]} delete_rows - Lista med villka rader som ska tas bort
*/
function deleteRowsFromSpreadsheet(sheet, delete_rows) {

for (var k = delete_rows.length-1; k >= 0 ; k--) { //Tar bort rader, starta nerifrån

var tmp_row = delete_rows[k];
Logger.log("Remove row " + tmp_row);
sheet.deleteRow(tmp_row);
}
}


/*
* Kolla om ett objekt är inkluderat i en lista
* param, lista, objekt
Expand Down Expand Up @@ -745,4 +750,4 @@ function removeDiacritics (str) {
str = str.replace(defaultDiacriticsRemovalMap[i].letters, defaultDiacriticsRemovalMap[i].base);
}
return str;
}
}
56 changes: 56 additions & 0 deletions Google-drive-migrering/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Migreringsverktyg för Google drive
Dessa program är tänkta att användas för kåren vid migrering från att kåren tidigare har använt vanlig Google drive och att nu börja använda Googles
Delade enheter.

För att hjälpa till med migreringen har olika skript tagits fram som du kan läsa mer om nedan.

## Skillnad mellan Google drive och Google Delade enheter
Vanliga Google drive kan beskrivas som att varje person som skapar en fil eller mapp äger den och inga andra kan ta bort den utan kan bara ta bort den hos
andra som har tillgång till den och sig själv men ej ta bort den för den som skapat den. Då det ju går att skapa undermappar till andra mappar som andra
har skapat blir det lätt svåröverskådligt med alla olika mapp- eller filägare och det går inte heller att få en hållbar lagringslösning på lång sikt.
Du som ej äger en fil kan ej flytta den till delade enheter utan kan enbart skapa en kopia där.

Delade enheter fungerar som en vanlig hårddisk på en server. Om någon annan tar bort en fil försvinner den hos alla andra också.

För att minska risken att ledare använder gamla filer på drive och inte eventuella nya kopior på delade enheter är det bra att ta bort så mycket
delning som möjligt från filer på drive så att enbart du själv och filägaren står kvar för att sen ta bort din egna behörighet också. För att minska
spridning av känsliga uppgifter är det också bra att ta bort känslig data ur filen innan du tar bort din egna behörighet. Tyvärr går det inte att
ta bort filen helt och hållet, så filen kommer finnas kvar och eventuellt kunna återställas om versionshistorik finns.
Skripten hjälper till med detta arbete vilket kan vara omständigt om det görs manuellt.

## Skript
### [Steg 1 - Ge bort ägarskap](Steg1-ge-bort-ägarskap)
#### Ge bort ditt ägarskap för filer och mappar
Skript för att dela med användare i kåren som har tillgång till en given mapp och undermappar för att flytta deras ägarskap till dig eller given
e-postadress.

### [Steg 2 - Tvingad ändring av filägare](Steg2-tvingad-ändring-filägare)
#### Lista vilka som äger filer och undermappar i en mapp
Skript för att få fram vilka som äger alla filer och undermappar till en given mapp.

#### Ta bort länkdelning och redigerare för filer och undermappar i en mapp
Skript som tar bort länkdelning och redigerare för alla filer och undermappar till en given mapp. De enda som är kvar är fil/mapp-ägaren och du själv.

#### Skapa nya filer som du själv äger
Skript som skapar filer som du själv äger som är kopior och tar bort orginalfilen för dig. Skriver också över orginalfilen med ny data.

### [Steg 3 - Flytta filer](Steg3-flytta-filer)
#### Radera tomma mappar
Skript som raderar tomma mappar.

#### Flytta filer
Skript som flyttar dina filer och kopierar över mappar.

## Förslag till utförandesteg
1. Ladda ner en kopia från Google drive för den mappen du vill flytta för att ha som säkerhetskopia.
1. Sätt upp alla skripten enligt instruktionerna.
1. Kör skriptet [`ListaÄgare`](Steg2-tvingad-ändring-filägare) för att få fram e-postadresser på vilka som äger alla filer och undermappar.
1. Skicka ett mejl och dela skriptet [`BytaÄgare`](Steg1-ge-bort-ägarskap) enligt instruktionen till de det berör. Du kommer få massor av e-brev när någon kör skriptet så att du vet. Se också till att de du skickar skriptet till har e-postkonto på samma domän som de ska överföra ägarskapet till.
1. Nu är förhoppningsvis allt överfört till dig om alla har kört skriptet. Kör skriptet [`ListaÄgare`](Steg2-tvingad-ändring-filägare) för att se om det nu bara är du som är listad som ägare.
1. När du är nöjd; kör skriptet [`ÄndraDelning`](Steg2-tvingad-ändring-filägare) för att se till så att inte alla längre har tillgång till alla filer. Det kan behövas lite manuellt arbete med ändring av behörighetsdelning efter körningen om inte programmet lyckas ändra på alla ställen.
1. Kör skriptet [`KopiaNyÄgare`](Steg2-tvingad-ändring-filägare) för att skapa kopior på de filer som du ej äger så att du nu äger de nya filerna. Orginalfilerna skrivs över och raderas för alla förutom orginalägaren.
1. Kör skriptet [`ÄndraDelning`](Steg2-tvingad-ändring-filägare) igen då det kan ha blivit problem med att ta bort behörigheten för ägaren till orginalfilerna från kopian.
1. Kör skriptet [`RaderaTommaMappar`](Steg3-flytta-filer) för att radera alla tomma undermappar till den mapp du ska flytta filerna ifrån.
1. Kör skriptet [`FlyttaFiler`](Steg3-flytta-filer) för att flytta över dina egna filer till den delade enheten samt få med alla mappar.
1. Kör skriptet [`RaderaTommaMappar`](Steg3-flytta-filer) igen för att radera alla tomma undermappar till den mapp du har flyttat filerna ifrån. Detta då det antagligen har blivit en hel del tomma mappar nu.
1. Manuellt flytta över på lämpligt sätt de filer som är kvar att flytta samt radera mappar.
Loading

0 comments on commit ffb69b8

Please sign in to comment.