/// <summary> /// Synchronizes The YAF Profile with DNN Profile or reverse if /// one profile is newer then the other /// </summary> /// <param name="yafUserId">The YAF UserId</param> /// <param name="yafUserProfile">The YAF user profile.</param> /// <param name="yafCurrentUserData">The YAF current user data.</param> /// <param name="dnnUserInfo">DNN UserInfo of current User</param> /// <param name="boardSettings">The board settings.</param> /// <param name="ignoreLastUpdated">if set to <c>true</c> [ignore last updated].</param> public static void UpdateUserProfile( [NotNull] int yafUserId, [CanBeNull] YAF.Utils.UserProfile yafUserProfile, [CanBeNull] IUserData yafCurrentUserData, [NotNull] UserInfo dnnUserInfo, [NotNull] BoardSettings boardSettings, [CanBeNull] bool ignoreLastUpdated = false) { var logger = BoardContext.Current.Get <ILogger>(); try { var yafTime = yafUserProfile.LastSyncedWithDNN; var dnnTime = Profile.YafDnnGetLastUpdatedProfile(dnnUserInfo.UserID); if (dnnTime <= yafTime && !ignoreLastUpdated) { return; } SyncYafProfile(yafUserId, yafUserProfile, yafCurrentUserData, dnnUserInfo, boardSettings); } catch (Exception ex) { logger?.Log( "Error while Syncing dnn userprofile with Yaf", EventLogTypes.Error, null, "Profile Syncronizer", ex); } }
/// <summary> /// DNN Profile is newer, sync YAF now /// NOTE : no need to manually sync Email Address /// </summary> /// <param name="yafUserId">The YAF user id.</param> /// <param name="yafUserProfile">The YAF user profile.</param> /// <param name="yafUserData">The YAF user data.</param> /// <param name="dnnUserInfo">The DNN user info.</param> /// <param name="boardSettings">The board settings.</param> private static void SyncYafProfile( int yafUserId, YAF.Utils.UserProfile yafUserProfile, IUserData yafUserData, UserInfo dnnUserInfo, BoardSettings boardSettings) { BoardContext.Current.GetRepository <User>().Save( yafUserId, boardSettings.BoardID, dnnUserInfo.Username, dnnUserInfo.DisplayName, dnnUserInfo.Email, dnnUserInfo.Profile.PreferredTimeZone.Id, yafUserData.LanguageFile.IsSet() ? yafUserData.LanguageFile : null, yafUserData.CultureUser, yafUserData.ThemeFile, true, null, null, null, dnnUserInfo.Profile.PreferredTimeZone.SupportsDaylightSavingTime, yafUserData.IsActiveExcluded); if (dnnUserInfo.Profile.FullName.IsSet()) { yafUserProfile.RealName = dnnUserInfo.Profile.FullName; } if (dnnUserInfo.Profile.Country.IsSet() && !dnnUserInfo.Profile.Country.Equals("N/A")) { var regionInfo = GetRegionInfoFromCountryName(dnnUserInfo.Profile.Country); if (regionInfo != null) { yafUserProfile.Country = regionInfo.TwoLetterISORegionName; } } if (dnnUserInfo.Profile.City.IsSet()) { yafUserProfile.City = dnnUserInfo.Profile.City; } if (dnnUserInfo.Profile.Website.IsSet()) { yafUserProfile.Homepage = dnnUserInfo.Profile.Website; } yafUserProfile.LastSyncedWithDNN = DateTime.Now; yafUserProfile.Save(); yafUserProfile.Save(); try { if (dnnUserInfo.Profile.Photo.IsSet() && !dnnUserInfo.Profile.PhotoURL.Contains("no_avatar.gif") && dnnUserInfo.Profile.Photo.ToType <int>() > 0) { SaveDnnAvatar(dnnUserInfo.Profile.PhotoURL, yafUserId); } else { BoardContext.Current.GetRepository <User>().DeleteAvatar(yafUserId); } } catch (Exception) { } BoardContext.Current.Get <IRaiseEvent>().Raise(new UpdateUserEvent(yafUserId)); BoardContext.Current.Get <IDataCache>().Clear(); }