@@ -20,15 +20,16 @@ function Anvandare() {
2020 var defaultOrgUnitPath = "/Scoutnet" ;
2121 var suspendedOrgUnitPath = defaultOrgUnitPath + "/" + "Avstängda" ;
2222
23- var allMembers = fetchScoutnetMembers ( ) ; //Alla medlemmar med alla attribut som finns i APIt för konton
24- Logger . log ( "AllMembers.length by fetchScoutnetMembers = " + allMembers . length ) ;
23+ if ( "group" == organisationType ) {
24+ var allMembers = fetchScoutnetMembers ( ) ; //Alla medlemmar med alla attribut som finns i APIt för konton
25+ Logger . log ( "AllMembers.length by fetchScoutnetMembers = " + allMembers . length ) ;
26+ Logger . log ( "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" ) ;
27+ Logger . log ( "Antal medlemmar i scoutnet = % " , allMembers . length ) ;
28+ }
29+
2530 var useraccounts = getGoogleAccounts ( defaultOrgUnitPath ) ;
26-
27- var MembersProcessed = [ ] ;
2831
29- Logger . log ( "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" ) ;
30- Logger . log ( "Antal medlemmar i scoutnet = % " , allMembers . length ) ;
31-
32+ var MembersProcessed = [ ] ;
3233
3334 for ( var p = 0 ; p < userAccountConfig . length ; p ++ ) { //Gå igenom Listorna som är definierade i Konfiguration.gs, avsnitt "userAccountConfig"
3435
@@ -48,28 +49,32 @@ function Anvandare() {
4849 Logger . log ( "Beskrivning: %s" , userAccountConfig [ p ] . description ) ;
4950
5051 createSuborganisationIfNeeded ( orgUnitPath ) ;
51-
52+
5253 var membersInAList ;
5354 if ( scoutnetListId ) {
5455 membersInAList = fetchScoutnetMembersMultipleMailinglists ( scoutnetListId , "" , "" ) ;
5556 }
56- else { //Om man ej anger listId för en e-postlista
57+ else if ( "group" == organisationType ) { //Om man ej anger listId för en e-postlista; endast för kårer, ej distrikt
5758 membersInAList = getScoutleaders ( allMembers ) ;
5859 }
5960 Logger . log ( "MembersInAlist antal personer= " + membersInAList . length ) ;
6061
6162 for ( var i = 0 ; i < membersInAList . length ; i ++ ) { //Här Processas alla medlemmar
62- if ( MembersProcessed . find ( o => o == membersInAList [ i ] . member_no ) ) // Leta efter kontot i listan över redan processade konton
63- {
63+ Logger . log ( "**************" ) ;
64+ if ( MembersProcessed . find ( o => o == membersInAList [ i ] . member_no ) ) { // Leta efter kontot i listan över redan processade konton
6465 Logger . log ( "Användaren är redan processad: " + membersInAList [ i ] . first_name + " " + membersInAList [ i ] . last_name ) ;
6566 }
6667 else
6768 {
6869 Logger . log ( "Användaren ska processas: " + membersInAList [ i ] . first_name + " " + membersInAList [ i ] . last_name ) ;
6970 MembersProcessed . push ( membersInAList [ i ] . member_no ) ; //Lägg till kontot i listan över processade konton
70- var obj = allMembers . find ( obj => obj . member_no == membersInAList [ i ] . member_no ) ; //Leta upp kontot i listan övar alla konton
71- //anledningen till att inte använda objektet från epostlistan är att det finns bara begränsad information i det objektet
72-
71+ if ( "group" == organisationType ) { //Alla attribut endast för kårer, ej distrikt
72+ var obj = allMembers . find ( obj => obj . member_no == membersInAList [ i ] . member_no ) ; //Leta upp kontot i listan övar alla konton
73+ //anledningen till att inte använda objektet från epostlistan är att det finns bara begränsad information i det objektet
74+ }
75+ else { //För distrikt
76+ var obj = membersInAList [ i ] ;
77+ }
7378 var GoUser = useraccounts . find ( u => u . externalIds !== undefined && u . externalIds . some ( extid => extid . type === "organization" && extid . value === obj . member_no ) ) ; // leta upp befintligt Googlekonto som representerar rätt objekt
7479 if ( GoUser ) {
7580 // Användaren fanns i listan
@@ -81,8 +86,7 @@ function Anvandare() {
8186 //Logger.log("Antal innan: %s, efter: %s",ia,ib );
8287 updateAccount ( obj , GoUser , orgUnitPath ) //uppdatera alla uppgifter på googlekontot med uppgifter från Scoutnet
8388 }
84- else
85- {
89+ else {
8690 Logger . log ( "Skapar Ny Googleanvändare" ) ;
8791 createAccount ( obj , orgUnitPath ) ; //Skapa Googlekonto för denna användare
8892 }
@@ -91,8 +95,7 @@ function Anvandare() {
9195 }
9296 Logger . log ( "Googlekonton som är kvar: %s" , useraccounts . length ) ;
9397
94- for ( var goacc in useraccounts )
95- {
98+ for ( var goacc in useraccounts ) {
9699 Logger . log ( "Stänger av konto, id: %s, %s" , useraccounts [ goacc ] . id , useraccounts [ goacc ] . name . fullName ) ;
97100 suspendAccount ( useraccounts [ goacc ] , suspendedOrgUnitPath )
98101 }
@@ -235,7 +238,7 @@ function createAccount(member, orgUnitPath) {
235238
236239/*
237240 * Kontrollera om ett konto med denna e-postadress existerar
238- * @param {string } email - En e-postadress inom kårens GSuite
241+ * @param {string } email - En e-postadress inom kårens Google Workspace
239242 *
240243 * @returns {boolean } - True eller false om e-postadressen finns
241244 */
@@ -274,23 +277,58 @@ function checkIfEmailExists(email) {
274277 */
275278function updateAccount ( member , useraccount , orgUnitPath ) {
276279
280+ if ( member . mobile_phone ) { //För distrikt som hämtar attribut via e-postlist-api:et då det är annat namn där
281+ member . contact_mobile_phone = member . mobile_phone ;
282+ }
283+
277284 var phnum = intphonenumber ( member . contact_mobile_phone ) ; // gör mobilnummret till internationellt nummer om möjligt
278285 var update = false ;
279286
287+ var phnum_recovery = "" ;
288+ if ( validatePhonenumberForE164 ( phnum ) ) {
289+ phnum_recovery = phnum ;
290+ }
291+ else {
292+ phnum_recovery = "" ;
293+ }
294+
280295 var accountPrimaryPhoneNumber = "" ;
281296 if ( typeof useraccount . phones !== 'undefined' && useraccount . phones ) {
282297 if ( - 1 != useraccount . phones . findIndex ( phoneNumber => phoneNumber . type === "mobile" && phoneNumber . primary === true ) ) {
283298 accountPrimaryPhoneNumber = useraccount . phones . find ( phoneNumber => phoneNumber . type === "mobile" && phoneNumber . primary === true ) . value ;
284299 }
285300 }
286301
302+ var accountKeywordAvatarUpdated = "" ;
303+ if ( typeof useraccount . keywords !== 'undefined' && useraccount . keywords ) {
304+ if ( - 1 != useraccount . keywords . findIndex ( keyword => keyword . type === "custom" && keyword . customType === "avatar_updated" ) ) {
305+ accountKeywordAvatarUpdated = useraccount . keywords . find ( keyword => keyword . type === "custom" && keyword . customType === "avatar_updated" ) . value ;
306+ }
307+ }
308+
309+ if ( typeof syncUserAvatar === 'undefined' || ! syncUserAvatar ) {
310+ Logger . log ( "Ska ej synkronisera profilbild" ) ;
311+ member . avatar_updated = "" ;
312+ }
313+
314+ var shouldBeKeywordAvatarUpdated = member . avatar_updated ;
315+ if ( typeof useraccount . thumbnailPhotoEtag !== 'undefined' ) {
316+ shouldBeKeywordAvatarUpdated += useraccount . thumbnailPhotoEtag ;
317+ }
318+
319+ Logger . log ( "shouldBeKeywordAvatarUpdated " + shouldBeKeywordAvatarUpdated ) ;
320+ Logger . log ( "accountKeywordAvatarUpdated " + accountKeywordAvatarUpdated ) ;
321+ //Logger.log("Avatar updated " + member.avatar_updated);
322+ Logger . log ( "Avatar url " + member . avatar_url ) ;
323+
287324 if ( useraccount . name . givenName != member . first_name
288325 || useraccount . name . familyName != member . last_name
289326 || useraccount . suspended
290327 || useraccount . orgUnitPath != orgUnitPath
291- || ( ( ! useraccount . recoveryEmail ) && ( member . email ) )
292- || ( ( useraccount . recoveryPhone != phnum ) && ( member . contact_mobile_phone ) )
293- || ( ( accountPrimaryPhoneNumber != phnum ) && ( member . contact_mobile_phone ) ) ) {
328+ || ( ( useraccount . recoveryEmail != member . email ) && ( ! ( ! useraccount . recoveryEmail && member . email === "" ) ) )
329+ || ( ( useraccount . recoveryPhone != phnum_recovery ) && ( member . contact_mobile_phone ) && ( typeof useraccount . recoveryPhone !== 'undefined' ) )
330+ || ( ( accountPrimaryPhoneNumber != phnum ) && ( member . contact_mobile_phone ) )
331+ || ( accountKeywordAvatarUpdated != shouldBeKeywordAvatarUpdated ) ) {
294332 // Något behöver uppdateras
295333
296334 Logger . log ( 'Användare %s %s uppdateras' , useraccount . name . givenName , useraccount . name . familyName ) ;
@@ -300,36 +338,43 @@ function updateAccount(member, useraccount, orgUnitPath) {
300338 if ( useraccount . name . givenName != member . first_name ) {
301339 if ( ! user . name )
302340 { user . name = { } }
303- Logger . log ( "Nytt förnamn: %s" , member . first_name ) ;
341+ Logger . log ( "Nytt förnamn: %s" , member . first_name ) ;
304342 user . name . givenName = member . first_name ;
305343 update = true ;
306344 }
307345 if ( useraccount . name . familyName != member . last_name ) {
308346 if ( ! user . name )
309347 { user . name = { } }
310- Logger . log ( "Nytt efternamn: %s" , member . last_name ) ;
348+ Logger . log ( "Nytt efternamn: %s" , member . last_name ) ;
311349 user . name . givenName = member . last_name ;
312350 update = true ;
313351 }
314352 if ( useraccount . orgUnitPath != orgUnitPath ) {
315- Logger . log ( "Ny OrganizationUnit: %s" , orgUnitPath ) ;
353+ Logger . log ( "Ny OrganizationUnit: %s" , orgUnitPath ) ;
316354 user . orgUnitPath = orgUnitPath ;
317355 update = true ;
318356 }
319- if ( ( ! useraccount . recoveryEmail ) && ( member . email ) ) {
320- Logger . log ( "Ny återställningsepost: %s" , member . email ) ;
357+
358+ //Logger.log("useraccount.recoveryEmail " + useraccount.recoveryEmail);
359+ //Logger.log("useraccount.recoveryEmail typeof " + typeof useraccount.recoveryEmail);
360+ //Logger.log("member.email " + member.email);
361+ //Logger.log("member.email typeof " + typeof member.email);
362+ if ( ( useraccount . recoveryEmail != member . email ) && ( ! ( ! useraccount . recoveryEmail && member . email === "" ) ) ) {
363+ Logger . log ( "Ny återställningse-post: %s" , member . email ) ;
321364 user . recoveryEmail = member . email ;
322365 update = true ;
323366 } ;
324367 // Lägg till återställningsinformation på Googlekontot
325- if ( ( useraccount . recoveryPhone != phnum ) && ( member . contact_mobile_phone ) ) {
326- if ( phnum ) {
327- Logger . log ( "Nytt återställningsnummer: %s" , phnum ) ;
328- user . recoveryPhone = phnum ;
368+ //Logger.log("useraccount.recoveryPhone " + useraccount.recoveryPhone);
369+ //Logger.log("phnum_recovery " + phnum_recovery);
370+ //Logger.log("phnum " + phnum);
371+ //Logger.log("member.contact_mobile_phone " + member.contact_mobile_phone);
372+ if ( ( useraccount . recoveryPhone != phnum_recovery ) && ( member . contact_mobile_phone ) ) {
373+ Logger . log ( "Nytt återställningsnummer: %s" , phnum_recovery ) ;
374+ user . recoveryPhone = phnum_recovery ;
329375 update = true ;
330- }
331-
332376 }
377+
333378 if ( typeof syncUserContactInfo !== 'undefined' && syncUserContactInfo ) {
334379 if ( ( accountPrimaryPhoneNumber != phnum ) && ( member . contact_mobile_phone ) ) {
335380 if ( phnum ) {
@@ -356,7 +401,64 @@ function updateAccount(member, useraccount, orgUnitPath) {
356401 }
357402 }
358403 }
359- if ( useraccount . suspended ) {
404+
405+ if ( accountKeywordAvatarUpdated != shouldBeKeywordAvatarUpdated ) {
406+ Logger . log ( "Profilbilden ska uppdateras" ) ;
407+
408+ var userPhoto ;
409+ var keywordAvatarUpdatedToUpdate = "" ;
410+
411+ if ( ! member . avatar_updated ) { //Ingen profilbild i Scoutnet
412+ Logger . log ( "Ingen profilbild i Scoutnet eller avaktiverad synkronisering" ) ;
413+ //Om tomt i Scoutnet, ta bort bilden i Google Workspace
414+
415+ try {
416+ userPhoto = AdminDirectory . Users . Photos . remove ( useraccount . primaryEmail ) ;
417+ Logger . log ( "Tagit bort profilbild" ) ;
418+ }
419+ catch ( err ) {
420+ Logger . log ( "--------------------------" ) ;
421+ Logger . log ( "Error: %s" , err . message ) ;
422+ Logger . log ( "--------------------------" ) ;
423+ }
424+ }
425+ else { //Om bild i Scoutnet, uppdatera bild i Google Workspace
426+ Logger . log ( "Finns ny profilbild i Scoutnet" ) ;
427+ try {
428+ var blob = UrlFetchApp . fetch ( member . avatar_url ) . getBlob ( ) ;
429+ var data = Utilities . base64EncodeWebSafe ( blob . getBytes ( ) ) ;
430+ userPhoto = AdminDirectory . Users . Photos . update ( { photoData : data } , useraccount . primaryEmail ) ;
431+ }
432+ catch ( err ) {
433+ Logger . log ( "--------------------------" ) ;
434+ Logger . log ( "Error: %s" , err . message ) ;
435+ Logger . log ( "--------------------------" ) ;
436+ }
437+
438+ try {
439+ userPhoto = AdminDirectory . Users . get ( useraccount . primaryEmail ) ;
440+ keywordAvatarUpdatedToUpdate = member . avatar_updated + userPhoto . thumbnailPhotoEtag ;
441+ Logger . log ( "Uppdaterat profilbild" ) ;
442+ }
443+ catch ( err ) {
444+ Logger . log ( "--------------------------" ) ;
445+ Logger . log ( "Error: %s" , err . message ) ;
446+ Logger . log ( "--------------------------" ) ;
447+ }
448+ }
449+ //Uppdatera sen Userfältet med avatar_updated och bildens etag
450+ Logger . log ( "Den nya avatarUpdated " + keywordAvatarUpdatedToUpdate ) ;
451+ var keywordArray = [ ] ;
452+ var tmp_avatarUpdated = {
453+ "value" : keywordAvatarUpdatedToUpdate ,
454+ "type" : "custom" ,
455+ "customType" : "avatar_updated"
456+ } ;
457+ keywordArray . push ( tmp_avatarUpdated ) ;
458+ user . keywords = keywordArray ;
459+ update = true ;
460+ }
461+ if ( useraccount . suspended ) {
360462 Logger . log ( "Aktiverad." ) ;
361463 user . suspended = false ;
362464 }
@@ -493,7 +595,8 @@ function fetchScoutnetMembers() {
493595 'sex' , 'address_co' , 'address_1' , 'address_2' , 'address_3' , 'postcode' , 'town' ,
494596 'country' , 'contact_mobile_phone' , 'contact_home_phone' , 'contact_mothers_name' ,
495597 'contact_mobile_mum' , 'contact_telephone_mum' , 'contact_fathers_name' , 'contact_mobile_dad' ,
496- 'contact_telephone_dad' , 'prev_term' , 'prev_term_due_date' , 'current_term' , 'current_term_due_date' ] ;
598+ 'contact_telephone_dad' , 'prev_term' , 'prev_term_due_date' , 'current_term' ,
599+ 'current_term_due_date' , 'avatar_updated' , 'avatar_url' ] ;
497600
498601 //Dessa attributvärden ska användas som gemener för bättre jämförelser
499602 var variabel_lista_lowercase = [ 'email' , 'contact_email_mum' , 'contact_email_dad' , 'contact_alt_email' , 'extra_emails' ] ;
0 commit comments