/// <summary> /// Processes the item. /// </summary> /// <param name="e"> /// The <see cref="RepeaterItemEventArgs"/> instance containing the event data. /// </param> /// <returns> /// Returns the Item as string /// </returns> private string ProcessItem(RepeaterItemEventArgs e) { var dataItem = (LatestTopic)e.Item.DataItem; var currentItem = this.itemTemplate; var messageUrl = FriendlyUrlProvider.Instance().FriendlyUrl( this.yafTabInfo, $"{Globals.ApplicationURL(this.yafTabInfo.TabID)}&g=posts&m={dataItem.LastMessageID}", UrlRewriteHelper.CleanStringForURL( BoardContext.Current.Get <IBadWordReplace>().Replace(dataItem.Topic))); currentItem = currentItem.Replace("[LASTPOSTICON]", string.Empty); // Render TOPICLINK var textMessageLink = new HyperLink { Text = BoardContext.Current.Get <IBadWordReplace>() .Replace(dataItem.Topic), NavigateUrl = messageUrl }; currentItem = currentItem.Replace("[TOPICLINK]", textMessageLink.RenderToString()); // Render FORUMLINK var forumLink = new HyperLink { Text = dataItem.Forum, NavigateUrl = FriendlyUrlProvider.Instance().FriendlyUrl( this.yafTabInfo, $"{Globals.ApplicationURL(this.yafTabInfo.TabID)}&g=topics&f={dataItem.ForumID}", UrlRewriteHelper.CleanStringForURL( BoardContext.Current.Get <IBadWordReplace>() .Replace(dataItem.Forum))) }; currentItem = currentItem.Replace("[FORUMLINK]", forumLink.RenderToString()); // Render BYTEXT currentItem = currentItem.Replace( "[BYTEXT]", BoardContext.Current.Get <IHaveLocalization>().GetText("SEARCH", "BY")); // Render LASTUSERLINK // Just in case... if (dataItem.LastUserID.HasValue) { var userName = BoardContext.Current.Get <BoardSettings>().EnableDisplayName ? dataItem.LastUserDisplayName : dataItem.LastUserName; userName = new UnicodeEncoder().XSSEncode(userName); var lastUserLink = new HyperLink { Text = userName, ToolTip = userName, NavigateUrl = FriendlyUrlProvider.Instance().FriendlyUrl( this.yafTabInfo, $"{Globals.ApplicationURL(this.yafTabInfo.TabID)}&g=profile&u={dataItem.LastUserID}", userName) }; currentItem = currentItem.Replace("[LASTUSERLINK]", lastUserLink.RenderToString()); } // Render LASTMESSAGE var lastMessage = BBCodeHelper.StripBBCode( HtmlHelper.StripHtml(HtmlHelper.CleanHtmlString(dataItem.LastMessage))) .RemoveMultipleWhitespace(); try { var match = Regex.Match(currentItem, @"\[LASTMESSAGE\:(?<count>[0-9]*)\]", RegexOptions.Compiled); if (match.Success) { var messageLimit = match.Groups["count"].Value.ToType <int>(); currentItem = currentItem.Replace( $"[LASTMESSAGE:{match.Groups["count"].Value}]", lastMessage.Truncate(messageLimit)); } else { currentItem = currentItem.Replace("[LASTMESSAGE]", lastMessage); } } catch (Exception) { currentItem = currentItem.Replace("[LASTMESSAGE]", lastMessage); } // Render LASTPOSTEDDATETIME var displayDateTime = new DisplayDateTime { DateTime = (DateTime)dataItem.LastPosted }; currentItem = currentItem.Replace("[LASTPOSTEDDATETIME]", displayDateTime.RenderToString()); return(currentItem); }
/// <summary> /// Processes the item. /// </summary> /// <param name="e">The <see cref="RepeaterItemEventArgs" /> instance containing the event data.</param> /// <returns>Returns the Item as string</returns> private string ProcessItem(RepeaterItemEventArgs e) { var currentRow = (DataRowView)e.Item.DataItem; var currentItem = this.itemTemplate; var messageUrl = this.ResolveUrl( "~/Default.aspx?tabid={1}&g=posts&m={0}#post{0}".FormatWith( currentRow["LastMessageID"], this.yafTabId)); // make message url... if (Classes.Config.EnableURLRewriting) { messageUrl = Globals.ResolveUrl( "~/tabid/{0}/g/posts/m/{1}/{2}.aspx#post{1}".FormatWith( this.yafTabId, currentRow["LastMessageID"], UrlRewriteHelper.CleanStringForURL(YafContext.Current.Get <IBadWordReplace>().Replace(currentRow["Topic"].ToString())))); } // Render [LASTPOSTICON] var lastPostedImage = new ThemeImage { LocalizedTitlePage = "DEFAULT", LocalizedTitleTag = "GO_LAST_POST", LocalizedTitle = Localization.GetString("LastPost.Text", this.LocalResourceFile), ThemeTag = "TOPIC_NEW", Style = "width:16px;height:16px" }; currentItem = currentItem.Replace("[LASTPOSTICON]", lastPostedImage.RenderToString()); // Render [TOPICLINK] var textMessageLink = new HyperLink { Text = YafContext.Current.Get <IBadWordReplace>() .Replace(currentRow["Topic"].ToString()), NavigateUrl = messageUrl }; currentItem = currentItem.Replace("[TOPICLINK]", textMessageLink.RenderToString()); // Render [FORUMLINK] var forumLink = new HyperLink { Text = currentRow["Forum"].ToString(), NavigateUrl = Classes.Config.EnableURLRewriting ? Globals.ResolveUrl( "~/tabid/{0}/g/topics/f/{1}/{2}.aspx".FormatWith( this.yafTabId, currentRow["ForumID"], currentRow["Forum"])) : this.ResolveUrl( "~/Default.aspx?tabid={1}&g=topics&f={0}".FormatWith( currentRow["ForumID"], this.yafTabId)) }; currentItem = currentItem.Replace("[FORUMLINK]", forumLink.RenderToString()); // Render [BYTEXT] currentItem = currentItem.Replace( "[BYTEXT]", YafContext.Current.Get <IHaveLocalization>().GetText("SEARCH", "BY")); // Render [LASTUSERLINK] // Just in case... if (currentRow["LastUserID"] != DBNull.Value) { var userName = YafContext.Current.Get <YafBoardSettings>().EnableDisplayName ? currentRow["LastUserDisplayName"].ToString() : currentRow["LastUserName"].ToString(); userName = this.HtmlEncode(userName); var lastUserLink = new HyperLink { Text = userName, ToolTip = userName, NavigateUrl = Classes.Config.EnableURLRewriting ? Globals.ResolveUrl( "~/tabid/{0}/g/profile/u/{1}/{2}.aspx".FormatWith( this.yafTabId, currentRow["LastUserID"], userName)) : this.ResolveUrl( "~/Default.aspx?tabid={1}&g=profile&u={0}".FormatWith( currentRow["LastUserID"], this.yafTabId)) }; currentItem = currentItem.Replace("[LASTUSERLINK]", lastUserLink.RenderToString()); } // Render [LASTMESSAGE] var lastMessage = BBCodeHelper.StripBBCode( HtmlHelper.StripHtml(HtmlHelper.CleanHtmlString(currentRow["LastMessage"].ToType <string>()))) .RemoveMultipleWhitespace(); try { var match = Regex.Match(currentItem, @"\[LASTMESSAGE\:(?<count>[0-9]*)\]", RegexOptions.Compiled); if (match.Success) { var messageLimit = match.Groups["count"].Value.ToType <int>(); currentItem = currentItem.Replace( "[LASTMESSAGE:{0}]".FormatWith(match.Groups["count"].Value), lastMessage.Truncate(messageLimit)); } else { currentItem = currentItem.Replace("[LASTMESSAGE]", lastMessage); } } catch (Exception) { currentItem = currentItem.Replace("[LASTMESSAGE]", lastMessage); } // Render [LASTPOSTEDDATETIME] var displayDateTime = new DisplayDateTime { DateTime = currentRow["LastPosted"].ToType <DateTime>() }; currentItem = currentItem.Replace("[LASTPOSTEDDATETIME]", displayDateTime.RenderToString()); return(currentItem); }
public IHttpActionResult GetNotifications(PagedResults pagedResults) { var userId = pagedResults.UserId; var pageSize = pagedResults.PageSize; var pageNumber = pagedResults.PageNumber; var activities = this.GetRepository <Activity>().GetPaged( a => a.UserID == userId && a.FromUserID.HasValue && a.Notification, pageNumber, pageSize); var attachmentItems = new List <AttachmentItem>(); activities.ForEach( activity => { var messageHolder = new PlaceHolder(); var iconLabel = new Label { CssClass = "fa-stack" }; var message = string.Empty; var icon = string.Empty; var topicLink = new HyperLink { NavigateUrl = BuildLink.GetLink( ForumPages.Posts, "m={0}#post{0}", activity.MessageID.Value), Text = $"<i class=\"fas fa-comment fa-fw mr-1\"></i>{this.GetRepository<Topic>().GetById(activity.TopicID.Value).TopicName}" }; var name = this.Get <IUserDisplayName>().GetName(activity.FromUserID.Value); if (activity.ActivityFlags.ReceivedThanks) { icon = "heart"; message = this.Get <ILocalization>().GetTextFormatted( "RECEIVED_THANKS_MSG", name, topicLink.RenderToString()); } if (activity.ActivityFlags.WasMentioned) { icon = "at"; message = this.Get <ILocalization>().GetTextFormatted( "WAS_MENTIONED_MSG", name, topicLink.RenderToString()); } if (activity.ActivityFlags.WasQuoted) { icon = "quote-left"; message = this.Get <ILocalization>().GetTextFormatted( "WAS_QUOTED_MSG", name, topicLink.RenderToString()); } var notify = activity.Notification ? "text-success" : "text-secondary"; iconLabel.Text = $@"<i class=""fas fa-circle fa-stack-2x {notify}""></i> <i class=""fas fa-{icon} fa-stack-1x fa-inverse""></i>"; messageHolder.Controls.Add(iconLabel); messageHolder.Controls.Add(new Literal { Text = message }); var attachment = new AttachmentItem { FileName = messageHolder.RenderToString() }; attachmentItems.Add(attachment); }); return(this.Ok( new GridDataSet { PageNumber = pageNumber, TotalRecords = activities.Any() ? this.GetRepository <Activity>().Count(a => a.UserID == userId && a.FromUserID.HasValue && a.Notification) .ToType <int>() : 0, PageSize = pageSize, AttachmentList = attachmentItems })); }