/// <summary> /// 获取头像文件名称 /// </summary> /// <param name="userId">UserID</param> /// <param name="avatarSizeType">头像尺寸类别</param> private static string GetAvatarFileName(long userId, AvatarSizeType avatarSizeType) { string filename; switch (avatarSizeType) { case AvatarSizeType.Original: filename = string.Format("{0}_original.{1}", userId, AvatarFileExtension); break; case AvatarSizeType.Big: filename = string.Format("{0}_big.{1}", userId, AvatarFileExtension); break; case AvatarSizeType.Medium: filename = string.Format("{0}_big.{1}", userId, AvatarFileExtension); break; case AvatarSizeType.Small: filename = string.Format("{0}.{1}", userId, AvatarFileExtension); break; case AvatarSizeType.Micro: filename = string.Format("{0}.{1}", userId, AvatarFileExtension); break; default: filename = string.Empty; break; } return(filename); }
/// <summary> /// 获取头像文件名称 /// </summary> /// <param name="userId">UserID</param> /// <param name="avatarSizeType">头像尺寸类别</param> private static string GetAvatarFileName(long userId, AvatarSizeType avatarSizeType) { string filename; long dateAvatar = new UserService().GetFullUser(userId).DateAvatar; switch (avatarSizeType) { case AvatarSizeType.Original: filename = string.Format("{0}_original.{1}", userId, AvatarFileExtension); break; case AvatarSizeType.Big: filename = string.Format("{2}_{0}_big.{1}", userId, AvatarFileExtension, dateAvatar); break; case AvatarSizeType.Medium: filename = string.Format("{2}_{0}_big.{1}", userId, AvatarFileExtension, dateAvatar); break; case AvatarSizeType.Small: filename = string.Format("{2}_{0}.{1}", userId, AvatarFileExtension, dateAvatar); break; case AvatarSizeType.Micro: filename = string.Format("{2}_{0}.{1}", userId, AvatarFileExtension, dateAvatar); break; default: filename = string.Empty; break; } return(filename); }
public List <string> GetStandardAvatarUrls(AvatarSizeType size) { _logger.LogInformation($"{nameof(MediaService)}.{nameof(GetStandardAvatarUrls)}.Start"); var relativeFolder = ""; switch (size) { case AvatarSizeType.Original: relativeFolder = _folderConfiguration.Avatars.Standards.Originals.GetFullHashPath(); break; case AvatarSizeType.Small: relativeFolder = _folderConfiguration.Avatars.Standards.Smalls.GetFullHashPath(); break; case AvatarSizeType.Large: relativeFolder = _folderConfiguration.Avatars.Standards.Larges.GetFullHashPath(); break; } var pcPath = Path.Combine(_fileManager.GetAbsoluteMediaRootPath(), relativeFolder); var result = Directory.GetFiles(pcPath) .Select(x => _fileManager.ChangePcPathToWeb(Path.Combine(relativeFolder, Path.GetFileName(x)))).ToList(); _logger.LogInformation($"{nameof(MediaService)}.{nameof(GetStandardAvatarUrls)}.End"); return(result); }
public void CopyAvatars(string sourceFolder, AvatarType backgroundType, AvatarSizeType copyToNewSize) { if (string.IsNullOrEmpty(sourceFolder)) { throw new Exception("SourceUrl is null or empty"); } var fullSourcePath = Path.Combine(_fileManager.GetAbsoluteMediaRootPath(), sourceFolder); var fullNewPath = Path.Combine(_fileManager.GetAbsoluteMediaRootPath(), CreateAvatarPath(backgroundType, copyToNewSize)); Size size; switch (copyToNewSize) { case AvatarSizeType.Original: size = null; break; case AvatarSizeType.Small: size = new SmallAvatarSizeFolder(null).Size; break; case AvatarSizeType.Large: size = new LargeAvatarSizeFolder(null).Size; break; default: throw new Exception("Such AvatarSizeType does not exist."); } var files = Directory.GetFiles(fullSourcePath); foreach (var file in files) { var fileName = Path.GetFileNameWithoutExtension(file); var ext = Path.GetExtension(file); if (fileName.Contains("original")) { fileName = fileName.Replace("original", copyToNewSize.ToString().ToLower()); } else { fileName = Guid.NewGuid().ToString().Replace("-", "").Substring(0, 10) + "_" + copyToNewSize.ToString().ToLower(); } var fullNewFilePath = Path.Combine(fullNewPath, fileName + ext); if (!File.Exists(fullNewFilePath)) { if (size == null) { CopyFile(file, fullNewFilePath); } else { ResizeImage(file, fullNewFilePath, size.Height, size.Width); } } } }
public async Task <string> GetUserAvatar(int userId, AvatarSizeType avatarSizeType) { Logger.LogInformation($"{nameof(AccountService)}.{nameof(GetUserAvatar)}.Start"); var avatar = await Db.UsersInfo.GetUserAvatar(userId); var result = MediaConverter.ToFullAvatarUrl(avatar, avatarSizeType); Logger.LogInformation($"{nameof(AccountService)}.{nameof(GetUserAvatar)}.End"); return(result); }
public async Task <(bool isUpdated, string url)> UpdateAvatarViaFile(int userId, AvatarType avatarType, AvatarSizeType avatarSizeType, IFormFile file) { Logger.LogInformation($"{nameof(AccountService)}.{nameof(UpdateAvatarViaFile)}.Start "); var url = await Hub.Media.UploadAvatarFile(AvatarType.Custom, file); var result = url.IsNullOrEmpty() ? (false, null) : (await Db.UsersInfo.UpdateUserOriginalAvatar(userId, url), MediaConverter.ToFullAvatarUrl(url, avatarSizeType) ); Logger.LogInformation($"{nameof(AccountService)}.{nameof(UpdateAvatarViaFile)}.End "); return(result); }
public async Task <List <string> > GetStandardAvatarUrls(AvatarSizeType avatarSize) { try { _logger.LogInformation($"{nameof(MediaServerConnection)}.{nameof(GetStandardAvatarUrls)}.Start"); var body = JsonConvert.SerializeObject(new { size = (int)avatarSize }); var result = (await MediaServerConnect(_standardAvatarUrl, body)).Urls; _logger.LogInformation($"{nameof(MediaServerConnection)}.{nameof(GetStandardAvatarUrls)}.End"); return(result); } catch (Exception ex) { _logger.LogError(ex, $"{nameof(MediaServerConnection)}.{nameof(GetStandardAvatarUrls)}"); } return(new List <string>()); }
public string ToFullAvatarUrl(string shortOriginalUrl, AvatarSizeType avatarSize) { if (string.IsNullOrEmpty(shortOriginalUrl)) { return(null); } if (shortOriginalUrl.Contains(MediaUrl)) { shortOriginalUrl = shortOriginalUrl.Replace(MediaUrl, ""); } var name = Path.GetFileName(shortOriginalUrl); shortOriginalUrl = Path.GetDirectoryName(string.Concat(shortOriginalUrl.SkipWhile(x => x == '/'))); if (avatarSize == AvatarSizeType.Original) { return(MediaUrl + shortOriginalUrl.Replace("\\", "/") + '/' + name); } name = name.Replace("original", avatarSize.ToString().ToLower()); switch (avatarSize) { case AvatarSizeType.Small: return(MediaUrl + shortOriginalUrl.Replace("\\", "/") .Replace(new OriginalSizeFolder(null).HashName, new SmallAvatarSizeFolder(null).HashName) + '/' + name); case AvatarSizeType.Large: return(MediaUrl + shortOriginalUrl.Replace("\\", "/") .Replace(new OriginalSizeFolder(null).HashName, new LargeAvatarSizeFolder(null).HashName) + '/' + name); default: throw new Exception($"There is no such avatar size {avatarSize}"); } }
/// <summary> /// 获取用户连接的头像 /// </summary> /// <param name="userId"></param> /// <param name="avatarSizeType"></param> /// <param name="enableClientCaching"></param> /// <returns></returns> public string _UserAvatarLink(AvatarSizeType avatarSizeType = AvatarSizeType.Small, bool enableClientCaching = false) { RouteValueDictionary dic = new RouteValueDictionary(); if (avatarSizeType != AvatarSizeType.Small) dic.Add("avatarSizeType", avatarSizeType); if (enableClientCaching) dic.Add("enableClientCaching", enableClientCaching); return CachedUrlHelper.Action("_UserAvatarLink", "Channel", CommonAreaName, dic); }
/// <summary> /// 获取用户头像 /// </summary> /// <param name="userId">用户Id</param> /// <param name="avatarSizeType">头像尺寸类型</param> /// <returns></returns> public static IStoreFile GetAvatar(this IUserService userService, long userId, AvatarSizeType avatarSizeType) { IStoreProvider storeProvider = DIContainer.Resolve<IStoreProvider>(); return storeProvider.GetFile(GetAvatarRelativePath(userId), GetAvatarFileName(userId, avatarSizeType)); }
public string CreateRelativeAvatarPath(string imageName, AvatarType avatarType, AvatarSizeType size) { _logger.LogInformation($"{nameof(MediaService)}.{nameof(CreateRelativeAvatarPath)}.Start"); AvatarSizeFolders avatarTypeFolder = null; switch (avatarType) { case AvatarType.Standard: avatarTypeFolder = _folderConfiguration.Avatars.Standards; break; case AvatarType.Custom: default: avatarTypeFolder = _folderConfiguration.Avatars.Customs; break; } var name = Path.GetFileNameWithoutExtension(imageName); var ext = Path.GetExtension(imageName); var relativeFolder = ""; switch (size) { case AvatarSizeType.Original: relativeFolder = avatarTypeFolder.Originals.GetFullHashPath(); break; case AvatarSizeType.Small: relativeFolder = avatarTypeFolder.Smalls.GetFullHashPath(); break; case AvatarSizeType.Large: relativeFolder = avatarTypeFolder.Larges.GetFullHashPath(); break; } var result = Path.Combine(relativeFolder, name + $"_{size.ToString().ToLower()}" + ext); _logger.LogInformation($"{nameof(MediaService)}.{nameof(CreateRelativeAvatarPath)}.End"); return(result); }
private string CreateAvatarPath(AvatarType backgroundType, AvatarSizeType copyToNewSize) { return(Path.Combine(GetHashFolderName("Avatar"), GetHashFolderName(backgroundType.ToString()), GetHashFolderName(copyToNewSize.ToString()))); }
/// <summary> /// 显示用户头像 /// </summary> /// <param name="user">User</param> /// <param name="enableNavigate">是否允许链接到用户空间</param> /// <param name="navigateTarget">头衔图片链接的Target</param> /// <param name="avatarSizeType">头像尺寸类别</param> /// <param name="enableCachingInClient">是否允许在客户端缓存</param> /// <param name="htmlAttributes">html属性,例如:new RouteValueDictionary{{"Class","editor"},{"width","90%"}}</param> public static MvcHtmlString ShowUserAvatar(this HtmlHelper htmlHelper, IUser user, AvatarSizeType avatarSizeType = AvatarSizeType.Medium, bool enableNavigate = true, HyperLinkTarget navigateTarget = HyperLinkTarget._blank, bool enableCachingInClient = true, RouteValueDictionary htmlAttributes = null, bool isShowUserCard = true, bool isShowTitle = false) { return(ShowUserAvatar(htmlHelper, user, enableNavigate ? SiteUrls.Instance().SpaceHome(user == null ? 0 : user.UserId) : string.Empty, avatarSizeType, navigateTarget, enableCachingInClient, htmlAttributes, isShowUserCard, isShowTitle)); }
/// <summary> /// 显示头像 /// </summary> /// <param name="user">用户对象</param> /// <param name="avatarSizeType">头像尺寸类别</param> /// <param name="link">链接到用户空间的地址</param> /// <param name="navigateTarget">链接类型</param> /// <param name="enableCachingInClient">是否允许在客户端缓存</param> /// <param name="htmlAttributes">html属性,例如:new RouteValueDictionary{{"Class","editor"},{"width","90%"}}</param> /// <returns></returns> public static MvcHtmlString ShowUserAvatar(this HtmlHelper htmlHelper, IUser user, string link, AvatarSizeType avatarSizeType = AvatarSizeType.Medium, HyperLinkTarget navigateTarget = HyperLinkTarget._blank, bool enableCachingInClient = true, RouteValueDictionary htmlAttributes = null, bool isShowUserCard = true, bool isShowTitle = false) { string avatarUrl = SiteUrls.Instance().UserAvatarUrl(user, avatarSizeType, enableCachingInClient); TagBuilder img = new TagBuilder("img"); if (htmlAttributes != null) { img.MergeAttributes(htmlAttributes); } img.MergeAttribute("src", avatarUrl); if (user != null) { img.MergeAttribute("alt", user.DisplayName); if (isShowTitle) { img.MergeAttribute("title", user.DisplayName); } } IUserProfileSettingsManager userProfileSettingsManager = DIContainer.Resolve <IUserProfileSettingsManager>(); UserProfileSettings userProfileSettings = userProfileSettingsManager.GetUserProfileSettings(); TagBuilder div = new TagBuilder("div"); switch (avatarSizeType) { case AvatarSizeType.Big: img.MergeAttribute("width", userProfileSettings.AvatarWidth.ToString()); div.AddCssClass("tn-avatar-big"); break; case AvatarSizeType.Medium: img.MergeAttribute("width", userProfileSettings.MediumAvatarWidth.ToString()); div.AddCssClass("tn-avatar-medium"); break; case AvatarSizeType.Small: img.MergeAttribute("width", userProfileSettings.SmallAvatarWidth.ToString()); div.AddCssClass("tn-avatar"); break; case AvatarSizeType.Micro: img.MergeAttribute("width", userProfileSettings.MicroAvatarWidth.ToString()); div.AddCssClass("tn-avatar-mini"); break; } if (!string.IsNullOrEmpty(link) && user != null) { TagBuilder a = new TagBuilder("a"); a.MergeAttribute("href", link); if (navigateTarget != HyperLinkTarget._self) { a.MergeAttribute("target", navigateTarget.ToString()); } if (isShowUserCard) { a.MergeAttribute("plugin", "tipsyHoverCard"); a.MergeAttribute("data-user-card-url", SiteUrls.Instance()._UserCard(user.UserId)); a.MergeAttribute("outerclass", "tn-user-card"); } a.InnerHtml = img.ToString(TagRenderMode.SelfClosing); div.InnerHtml = a.ToString(); return(new MvcHtmlString(div.ToString())); } else { div.InnerHtml = img.ToString(TagRenderMode.SelfClosing); return(new MvcHtmlString(div.ToString())); } }
/// <summary> /// 显示用户头像 /// </summary> /// <param name="user">User</param> /// <param name="enableNavigate">是否允许链接到用户空间</param> /// <param name="navigateTarget">头衔图片链接的Target</param> /// <param name="avatarSizeType">头像尺寸类别</param> /// <param name="enableCachingInClient">是否允许在客户端缓存</param> /// <param name="htmlAttributes">html属性,例如:new RouteValueDictionary{{"Class","editor"},{"width","90%"}}</param> public static MvcHtmlString ShowUserAvatar(this HtmlHelper htmlHelper, IUser user, AvatarSizeType avatarSizeType = AvatarSizeType.Medium, bool enableNavigate = true, HyperLinkTarget navigateTarget = HyperLinkTarget._blank, bool enableCachingInClient = true, RouteValueDictionary htmlAttributes = null, bool isShowUserCard = true, bool isShowTitle = false) { return ShowUserAvatar(htmlHelper, user, enableNavigate ? SiteUrls.Instance().SpaceHome(user == null ? 0 : user.UserId) : string.Empty, avatarSizeType, navigateTarget, enableCachingInClient, htmlAttributes, isShowUserCard, isShowTitle); }
/// <summary> /// 显示用户头像 /// </summary> /// <param name="userId">userID</param> /// <param name="enableNavigate">是否允许链接到用户空间</param> /// <param name="navigateTarget">头衔图片链接的Target</param> /// <param name="avatarSizeType">头像尺寸类别</param> /// <param name="htmlAttributes">html属性,例如:new RouteValueDictionary{{"Class","editor"},{"width","90%"}}</param> public static MvcHtmlString ShowUserAvatar(this HtmlHelper htmlHelper, long userId, AvatarSizeType avatarSizeType = AvatarSizeType.Medium, bool enableNavigate = true, HyperLinkTarget navigateTarget = HyperLinkTarget._blank, bool enableCachingInClient = true, RouteValueDictionary htmlAttributes = null, bool isShowUserCard = true, bool isShowTitle = false) { UserService userService = new UserService(); IUser user = userService.GetUser(userId); return(ShowUserAvatar(htmlHelper, user, avatarSizeType, enableNavigate, navigateTarget, enableCachingInClient, htmlAttributes, isShowUserCard, isShowTitle)); }
/// <summary> /// 用户头像Url /// </summary> /// <param name="user">用户</param> /// <param name="avatarSizeType">头像尺寸</param> /// <param name="enableClientCaching">是否启用客户端缓存</param> public string UserAvatarUrl(IUser user, AvatarSizeType avatarSizeType, bool enableClientCaching = false) { return userService.GetAvatarDirectlyUrl(user, avatarSizeType, enableClientCaching); }
/// <summary> /// 显示用户头像 /// </summary> /// <param name="userId">userID</param> /// <param name="enableNavigate">是否允许链接到用户空间</param> /// <param name="navigateTarget">头衔图片链接的Target</param> /// <param name="avatarSizeType">头像尺寸类别</param> /// <param name="htmlAttributes">html属性,例如:new RouteValueDictionary{{"Class","editor"},{"width","90%"}}</param> public static MvcHtmlString ShowUserAvatar(this HtmlHelper htmlHelper, long userId, AvatarSizeType avatarSizeType = AvatarSizeType.Medium, bool enableNavigate = true, HyperLinkTarget navigateTarget = HyperLinkTarget._blank, bool enableCachingInClient = true, RouteValueDictionary htmlAttributes = null, bool isShowUserCard = true, bool isShowTitle = false) { IUser user = DIContainer.Resolve<UserService>().GetUser(userId); return ShowUserAvatar(htmlHelper, user, avatarSizeType, enableNavigate, navigateTarget, enableCachingInClient, htmlAttributes, isShowUserCard, isShowTitle); }
/// <summary> /// 获取直连URL /// </summary> /// <param name="user">用户</param> /// <param name="avatarSizeType"><see cref="AvatarSizeType"/></param> /// <returns></returns> public static string GetAvatarDirectlyUrl(this IUserService userService, IUser user, AvatarSizeType avatarSizeType, bool enableClientCaching = false) { string url = string.Empty; IStoreProvider storeProvider = DIContainer.Resolve<IStoreProvider>(); string directlyRootUrl = storeProvider.DirectlyRootUrl; if (!string.IsNullOrEmpty(storeProvider.DirectlyRootUrl)) { url += storeProvider.DirectlyRootUrl; } else { url += WebUtility.ResolveUrl("~/Uploads"); //本机存储时仅允许用~/Uploads/ } if (user == null) { url += "/" + AvatarDirectory + "/avatar_anonymous"; } else { url += "/" + AvatarDirectory + "/" + user.Avatar; } switch (avatarSizeType) { case AvatarSizeType.Original: url += "_original." + AvatarFileExtension; break; case AvatarSizeType.Big: case AvatarSizeType.Medium: url += "_big." + AvatarFileExtension; break; case AvatarSizeType.Small: case AvatarSizeType.Micro: url += "." + AvatarFileExtension; break; default: url = string.Empty; break; } if (user != null && !enableClientCaching) { url += "?lq=" + DateTime.UtcNow.Ticks; } return url; }
/// <summary> /// 获取用户头像 /// </summary> /// <param name="userId">用户Id</param> /// <param name="avatarSizeType">头像尺寸类型</param> /// <returns></returns> public static IStoreFile GetAvatar(this IUserService userService, long userId, AvatarSizeType avatarSizeType) { IStoreProvider storeProvider = DIContainer.Resolve <IStoreProvider>(); return(storeProvider.GetFile(GetAvatarRelativePath(userId), GetAvatarFileName(userId, avatarSizeType))); }
/// <summary> /// 获取直连URL /// </summary> /// <param name="user">用户</param> /// <param name="avatarSizeType"><see cref="AvatarSizeType"/></param> /// <returns></returns> public static string GetAvatarDirectlyUrl(this IUserService userService, IUser user, AvatarSizeType avatarSizeType, bool enableClientCaching = false) { string url = string.Empty; IStoreProvider storeProvider = DIContainer.Resolve <IStoreProvider>(); string directlyRootUrl = storeProvider.DirectlyRootUrl; if (!string.IsNullOrEmpty(storeProvider.DirectlyRootUrl)) { url += storeProvider.DirectlyRootUrl; } else { url += WebUtility.ResolveUrl("~/Uploads"); //本机存储时仅允许用~/Uploads/ } if (user == null) { url += "/" + AvatarDirectory + "/avatar_anonymous"; } else { url += "/" + AvatarDirectory + "/" + user.Avatar; } switch (avatarSizeType) { case AvatarSizeType.Original: url += "_original." + AvatarFileExtension; break; case AvatarSizeType.Big: case AvatarSizeType.Medium: url += "_big." + AvatarFileExtension; break; case AvatarSizeType.Small: case AvatarSizeType.Micro: url += "." + AvatarFileExtension; break; default: url = string.Empty; break; } if (user != null && !enableClientCaching) { url += "?lq=" + DateTime.UtcNow.Ticks; } return(url); }
public ActionResult _UserAvatarLink(AvatarSizeType avatarSizeType = AvatarSizeType.Small, bool enableClientCaching = false) { string imgPath = SiteUrls.Instance().UserAvatarUrl(UserContext.CurrentUser, AvatarSizeType.Small, enableClientCaching); return Json(new StatusMessageData(StatusMessageType.Success, imgPath), JsonRequestBehavior.AllowGet); }
public ActionResult _App_Panel(string spaceKey, AvatarSizeType? avatarSizeType) { User user = userService.GetFullUser(spaceKey); if (user == null) return new EmptyResult(); int currentNavigationId = RouteData.Values.Get<int>("CurrentNavigationId", 0); NavigationService navigationService = DIContainer.Resolve<NavigationService>(); Navigation navigation = navigationService.GetNavigation(PresentAreaKeysOfBuiltIn.UserSpace, currentNavigationId, user.UserId); IEnumerable<Navigation> navigations = new List<Navigation>(); if (navigation != null) { if (navigation.Depth == 0) { navigations = navigation.Children; ViewData["ParentNavigation"] = navigation; } else if (navigation.Parent != null) { navigations = navigation.Parent.Children; ViewData["ParentNavigation"] = navigation.Parent; } ApplicationModel app = applicationService.Get(navigation.ApplicationId); if (app != null) { ViewData["Application"] = app; ViewData["AppCount"] = new OwnerDataService(TenantTypeIds.Instance().User()).GetLong(user.UserId, app.ApplicationKey + "-ThreadCount"); } IEnumerable<ApplicationManagementOperation> applicationManagementOperations = new ManagementOperationService().GetShortcuts(PresentAreaKeysOfBuiltIn.UserSpace, false); ViewData["ApplicationManagementOperations"] = applicationManagementOperations.Where(n => n.ApplicationId == navigation.ApplicationId && n.PresentAreaKey == PresentAreaKeysOfBuiltIn.UserSpace); } ViewData["User"] = user; ViewData["AvatarSizeType"] = avatarSizeType; return View(navigations); }
/// <summary> /// 获取头像文件名称 /// </summary> /// <param name="userId">UserID</param> /// <param name="avatarSizeType">头像尺寸类别</param> private static string GetAvatarFileName(long userId, AvatarSizeType avatarSizeType) { string filename; switch (avatarSizeType) { case AvatarSizeType.Original: filename = string.Format("{0}_original.{1}", userId, AvatarFileExtension); break; case AvatarSizeType.Big: filename = string.Format("{0}_big.{1}", userId, AvatarFileExtension); break; case AvatarSizeType.Medium: filename = string.Format("{0}_big.{1}", userId, AvatarFileExtension); break; case AvatarSizeType.Small: filename = string.Format("{0}.{1}", userId, AvatarFileExtension); break; case AvatarSizeType.Micro: filename = string.Format("{0}.{1}", userId, AvatarFileExtension); break; default: filename = string.Empty; break; } return filename; }
/// <summary> /// 显示头像 /// </summary> /// <param name="user">用户对象</param> /// <param name="avatarSizeType">头像尺寸类别</param> /// <param name="link">链接到用户空间的地址</param> /// <param name="navigateTarget">链接类型</param> /// <param name="enableCachingInClient">是否允许在客户端缓存</param> /// <param name="htmlAttributes">html属性,例如:new RouteValueDictionary{{"Class","editor"},{"width","90%"}}</param> /// <returns></returns> public static MvcHtmlString ShowUserAvatar(this HtmlHelper htmlHelper, IUser user, string link, AvatarSizeType avatarSizeType = AvatarSizeType.Medium, HyperLinkTarget navigateTarget = HyperLinkTarget._blank, bool enableCachingInClient = true, RouteValueDictionary htmlAttributes = null, bool isShowUserCard = true, bool isShowTitle = false) { string avatarUrl = SiteUrls.Instance().UserAvatarUrl(user, avatarSizeType, enableCachingInClient); TagBuilder img = new TagBuilder("img"); if (htmlAttributes != null) img.MergeAttributes(htmlAttributes); img.MergeAttribute("src", avatarUrl); if (user != null) { img.MergeAttribute("alt", user.DisplayName); if (isShowTitle) { img.MergeAttribute("title", user.DisplayName); } } ISettingsManager<UserProfileSettings> userProfileSettingsManager = DIContainer.Resolve<ISettingsManager<UserProfileSettings>>(); UserProfileSettings userProfileSettings = userProfileSettingsManager.Get(); TagBuilder div = new TagBuilder("div"); switch (avatarSizeType) { case AvatarSizeType.Big: img.MergeAttribute("width", userProfileSettings.AvatarWidth.ToString()); div.AddCssClass("tn-avatar-big"); break; case AvatarSizeType.Medium: img.MergeAttribute("width", userProfileSettings.MediumAvatarWidth.ToString()); div.AddCssClass("tn-avatar-medium"); break; case AvatarSizeType.Small: img.MergeAttribute("width", userProfileSettings.SmallAvatarWidth.ToString()); div.AddCssClass("tn-avatar"); break; case AvatarSizeType.Micro: img.MergeAttribute("width", userProfileSettings.MicroAvatarWidth.ToString()); div.AddCssClass("tn-avatar-mini"); break; } if (!string.IsNullOrEmpty(link) && user != null) { TagBuilder a = new TagBuilder("a"); a.MergeAttribute("href", link); if (navigateTarget != HyperLinkTarget._self) a.MergeAttribute("target", navigateTarget.ToString()); if (isShowUserCard) { a.MergeAttribute("plugin", "tipsyHoverCard"); a.MergeAttribute("data-user-card-url", SiteUrls.Instance()._UserCard(user.UserId)); a.MergeAttribute("outerclass", "tn-user-card"); } a.InnerHtml = img.ToString(TagRenderMode.SelfClosing); div.InnerHtml = a.ToString(); return new MvcHtmlString(div.ToString()); } else { div.InnerHtml = img.ToString(TagRenderMode.SelfClosing); return new MvcHtmlString(div.ToString()); } }