diff --git a/src/STS/Utils/MergeUtil.cs b/src/STS/Utils/MergeUtil.cs index 80c412e44b876f239a4c341f4b92c9ce7d2e840c..880ce3043152e76d71fb89b1155f98d5db6e5823 100644 --- a/src/STS/Utils/MergeUtil.cs +++ b/src/STS/Utils/MergeUtil.cs @@ -5,6 +5,9 @@ using Coscine.Configuration; using Coscine.Database.DataModel; using Coscine.Database.Models; using LinqToDB.Tools; +using Microsoft.IdentityModel.Protocols.WSFederation.Metadata; +using System; +using System.Collections.Generic; using System.Linq; namespace Coscine.Api.STS.Utils @@ -46,6 +49,7 @@ namespace Coscine.Api.STS.Utils MergeUserDiscipline(mergeIntoUser, mergeFromUser); MergeResourceOwner(mergeIntoUser, mergeFromUser); MergeTOSAccepted(mergeIntoUser, mergeFromUser); + MergeUserProperties(mergeIntoUser, mergeFromUser); // ExternalId gets merged last, in case something goes wrong MergeExternalId(mergeIntoUser, mergeFromUser); DeleteUser(mergeFromUser); @@ -169,6 +173,41 @@ namespace Coscine.Api.STS.Utils } } + private void MergeUserProperties(User mergeIntoUser, User mergeFromUser) + { + if (string.IsNullOrEmpty(mergeIntoUser.EmailAddress) && !string.IsNullOrEmpty(mergeFromUser.EmailAddress)) + { + mergeIntoUser.EmailAddress = mergeFromUser.EmailAddress; + } + + if (string.IsNullOrEmpty(mergeIntoUser.Surname) && !string.IsNullOrEmpty(mergeFromUser.Surname)) + { + mergeIntoUser.Surname = mergeIntoUser.Surname; + } + + if (string.IsNullOrEmpty(mergeIntoUser.Givenname) && !string.IsNullOrEmpty(mergeFromUser.Givenname)) + { + mergeIntoUser.Givenname = mergeIntoUser.Givenname; + } + + if (mergeIntoUser.TitleId == null && mergeFromUser.TitleId != null) + { + mergeIntoUser.TitleId = mergeFromUser.TitleId; + } + + if (string.IsNullOrEmpty(mergeIntoUser.Organization) && !string.IsNullOrEmpty(mergeFromUser.Organization)) + { + mergeIntoUser.Organization = mergeFromUser.Organization; + } + + if (string.IsNullOrEmpty(mergeIntoUser.Institute) && !string.IsNullOrEmpty(mergeFromUser.Institute)) + { + mergeIntoUser.Institute = mergeFromUser.Institute; + } + + _userModel.Update(mergeIntoUser); + } + private void DeleteUser(User user) { _userModel.Delete(user);