using System; using System.Data; using System.Web.UI; namespace yaf.controls { [ParseChildren( false )] public class TopicLine : BaseControl { private DataRowView m_row = null; private bool m_isAlt; public bool IsAlt { get { return this.m_isAlt; } set { this.m_isAlt = value; } } public object DataRow { set { m_row = ( DataRowView ) value; } } protected override void Render( System.Web.UI.HtmlTextWriter writer ) { System.Text.StringBuilder html = new System.Text.StringBuilder( 2000 ); html.AppendFormat( "", ( IsAlt ? "post_alt" : "post" ) ); // Icon string imgTitle = "", img = GetTopicImage( m_row, ref imgTitle ); html.AppendFormat( @"", img, imgTitle ); // Topic html.AppendFormat( @"{0}", GetPriorityMessage( m_row ) ); if ( FindUnread ) { object[] linkinfo = { Forum.GetLink(Pages.posts, "t={0}&find=unread", m_row["LinkTopicID"]), Utils.BadWordReplace(Convert.ToString(m_row["Subject"])),m_row["preview"] }; //html.AppendFormat(@"{1}", Forum.GetLink(Pages.posts, "t={0}&find=unread", m_row["LinkTopicID"]), Utils.BadWordReplace(Convert.ToString(m_row["Subject"]))); html.AppendFormat(@"{1}", linkinfo); } else { //if (Mession.LastVisit <= Convert.ToDateTime(row["LastPosted"])) //{ //} //else //{ object[] linkinfo = { Forum.GetLink(Pages.posts, "t={0}", m_row["LinkTopicID"]), Utils.BadWordReplace(Convert.ToString(m_row["Subject"])), m_row["preview"] }; //html.AppendFormat(@"{1}", Forum.GetLink(Pages.posts, "t={0}", m_row["LinkTopicID"]), Utils.BadWordReplace(Convert.ToString(m_row["Subject"]))); html.AppendFormat(@"{1}", linkinfo); //} } string tPager = CreatePostPager( Convert.ToInt32( m_row ["Replies"] ) + 1, ForumPage.BoardSettings.PostsPerPage, Convert.ToInt32( m_row ["LinkTopicID"] ) ); if ( tPager != String.Empty ) { // more then one page to show html.AppendFormat( @"
{0}", String.Format( ForumPage.GetText( "GOTO_POST_PAGER" ), tPager ) ); } //html.AppendFormat("
{0}: {1}",ForumPage.GetText("TOPICS","CREATED"),ForumPage.FormatDateShort(m_row["Posted"])); html.Append( "" ); // Topic Starter html.AppendFormat( @"{1}", Forum.GetLink( Pages.profile, "u={0}", m_row ["UserID"] ), BBCode.EncodeHTML( m_row ["Starter"].ToString() ) ); // Replies html.AppendFormat( @"{0}", FormatReplies() ); // Views html.AppendFormat( @"{0:N0}", m_row ["Views"] ); // Last Post html.AppendFormat( @"{0}", FormatLastPost() ); writer.Write( html.ToString() ); base.RenderChildren( writer ); writer.Write( "" ); } protected string GetTopicImage( object o, ref string imgTitle ) { DataRowView row = ( DataRowView ) o; DateTime lastPosted = row ["LastPosted"] != DBNull.Value ? ( DateTime ) row ["LastPosted"] : new DateTime( 2000, 1, 1 ); bool isLocked = ( ( int ) row ["TopicFlags"] & ( int ) TopicFlags.Locked ) == ( int ) TopicFlags.Locked; imgTitle = "???"; try { bool bIsLocked = isLocked || ( ( int ) row ["ForumFlags"] & ( int ) ForumFlags.Locked ) == ( int ) ForumFlags.Locked; if ( row ["TopicMovedID"].ToString().Length > 0 ) { imgTitle = ForumPage.GetText( "MOVED" ); return ForumPage.GetThemeContents( "ICONS", "TOPIC_MOVED" ); } DateTime lastRead = ForumPage.GetTopicRead( ( int ) row ["TopicID"] ); DateTime lastReadForum = ForumPage.GetForumRead( ( int ) row ["ForumID"] ); if ( lastReadForum > lastRead ) lastRead = lastReadForum; if ( lastPosted > lastRead ) { Mession.UnreadTopics++; if ( row ["PollID"] != DBNull.Value ) { imgTitle = ForumPage.GetText( "POLL_NEW" ); return ForumPage.GetThemeContents( "ICONS", "TOPIC_POLL_NEW" ); } else if ( row ["Priority"].ToString() == "1" ) { imgTitle = ForumPage.GetText( "STICKY" ); return ForumPage.GetThemeContents( "ICONS", "TOPIC_STICKY" ); } else if ( row ["Priority"].ToString() == "2" ) { imgTitle = ForumPage.GetText( "ANNOUNCEMENT" ); return ForumPage.GetThemeContents( "ICONS", "TOPIC_ANNOUNCEMENT_NEW" ); } else if ( bIsLocked ) { imgTitle = ForumPage.GetText( "NEW_POSTS_LOCKED" ); return ForumPage.GetThemeContents( "ICONS", "TOPIC_NEW_LOCKED" ); } else { imgTitle = ForumPage.GetText( "NEW_POSTS" ); return ForumPage.GetThemeContents( "ICONS", "TOPIC_NEW" ); } } else { if ( row ["PollID"] != DBNull.Value ) { imgTitle = ForumPage.GetText( "POLL" ); return ForumPage.GetThemeContents( "ICONS", "TOPIC_POLL" ); } else if ( row ["Priority"].ToString() == "1" ) { imgTitle = ForumPage.GetText( "STICKY" ); return ForumPage.GetThemeContents( "ICONS", "TOPIC_STICKY" ); } else if ( row ["Priority"].ToString() == "2" ) { imgTitle = ForumPage.GetText( "ANNOUNCEMENT" ); return ForumPage.GetThemeContents( "ICONS", "TOPIC_ANNOUNCEMENT" ); } else if ( bIsLocked ) { imgTitle = ForumPage.GetText( "NO_NEW_POSTS_LOCKED" ); return ForumPage.GetThemeContents( "ICONS", "TOPIC_LOCKED" ); } else { imgTitle = ForumPage.GetText( "NO_NEW_POSTS" ); return ForumPage.GetThemeContents( "ICONS", "TOPIC" ); } } } catch ( Exception ) { return ForumPage.GetThemeContents( "ICONS", "TOPIC" ); } } /// /// Creates the status message text for a topic. (i.e. Moved, Poll, Sticky, etc.) /// /// Current Topic Data Row /// Topic status text protected string GetPriorityMessage( DataRowView row ) { string strReturn = ""; if ( row ["TopicMovedID"].ToString().Length > 0 ) { strReturn = ForumPage.GetText( "MOVED" ); } else if ( row ["PollID"].ToString() != "" ) { strReturn = ForumPage.GetText( "POLL" ); } else switch ( int.Parse( row ["Priority"].ToString() ) ) { case 1: strReturn = ForumPage.GetText( "STICKY" ); break; case 2: strReturn = ForumPage.GetText( "ANNOUNCEMENT" ); break; } if ( strReturn.Length > 0 ) strReturn = String.Format( "[ {0} ] ", strReturn ); return strReturn; } /// /// Formats replies number for Topic Line /// /// " " if no replies or the number of replies. protected string FormatReplies() { int nReplies = Convert.ToInt32( m_row ["Replies"] ); return ( nReplies < 0 ) ? " " : String.Format( "{0:N0}", nReplies ); } /// /// Formats the Last Post for the Topic Line /// /// Formatted Last Post Text protected string FormatLastPost() { string strReturn = ForumPage.GetText( "no_posts" ); DataRowView row = m_row; if ( row ["LastMessageID"].ToString().Length > 0 ) { string strMiniPost = ForumPage.GetThemeContents( "ICONS", ( DateTime.Parse( row ["LastPosted"].ToString() ) > ForumPage.GetTopicRead( ( int ) m_row ["TopicID"] ) ) ? "ICON_NEWEST" : "ICON_LATEST" ); string strBy = String.Format( ForumPage.GetText( "by" ), String.Format( "{1} ", Forum.GetLink( Pages.profile, "u={0}", row ["LastUserID"] ), BBCode.EncodeHTML( row ["LastUserName"].ToString() ), strMiniPost, Forum.GetLink( Pages.posts, "m={0}#{0}", row ["LastMessageID"] ), ForumPage.GetText( "GO_LAST_POST" ) ) ); strReturn = String.Format( "{0}
{1}", ForumPage.FormatDateTimeTopic( Convert.ToDateTime( row ["LastPosted"] ) ), strBy ); } return strReturn; } /// /// Create pager for post. /// /// protected string CreatePostPager( int Count, int PageSize, int TopicID ) { string strReturn = ""; int NumToDisplay = 4; int PageCount = ( int ) Math.Ceiling( ( double ) Count / PageSize ); if ( PageCount > 1 ) { if ( PageCount > NumToDisplay ) { strReturn += MakeLink( "1", Forum.GetLink( Pages.posts, "t={0}", TopicID ) ); strReturn += " ... "; bool bFirst = true; // show links from the end for ( int i = ( PageCount - ( NumToDisplay - 1 ) ); i < PageCount; i++ ) { int iPost = i + 1; if ( bFirst ) bFirst = false; else strReturn += ", "; strReturn += MakeLink( iPost.ToString(), Forum.GetLink( Pages.posts, "t={0}&p={1}", TopicID, iPost ) ); } } else { bool bFirst = true; for ( int i = 0; i < PageCount; i++ ) { int iPost = i + 1; if ( bFirst ) bFirst = false; else strReturn += ", "; strReturn += MakeLink( iPost.ToString(), Forum.GetLink( Pages.posts, "t={0}&p={1}", TopicID, iPost ) ); } } } return strReturn; } private string MakeLink( string Text, string Link ) { return String.Format( "{1}", Link, Text ); } public bool FindUnread { set { ViewState ["FindUnread"] = value; } get { return ( ViewState ["FindUnread"] != null ) ? Convert.ToBoolean( ViewState ["FindUnread"] ) : false; } } } }