/// <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();
        }