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