📄 threadview.cs
字号:
if (csContext.User.IsAnonymous)
{
filterUsers.Visible = false;
hideReadPosts.Visible = false;
rememberSettingsButton.Visible = false;
dateFilter.Items.FindByValue( ((int) CSContext.Current.SiteSettings.DefaultThreadDateFilter).ToString() );
skin.FindControl( "FilterTopicRow" ).Visible = false;
skin.FindControl( "EmailNotificationRow" ).Visible = false;
}
// User permissions on new post button
//
if (mode != ThreadViewMode.MyForums)
{
User user = CSContext.Current.User;
if( forum.SectionID > 0 )
{
ForumPermission p = forum.ResolvePermission( user ) as ForumPermission;
if( !p.Read )
throw new CSException( CSExceptionType.AccessDenied );
if( !p.Post )
{
ForumImageButton newPostButton = (ForumImageButton) skin.FindControl("NewPostButton");
if (newPostButton != null)
{
newPostButton.Visible = false;
}
}
}
}
else
{
ForumImageButton newPostButton = (ForumImageButton) skin.FindControl("NewPostButton");
if (newPostButton != null)
{
newPostButton.Visible = false;
}
}
DataBind();
}
#endregion
#region Internal helper methods
private void SetSort()
{
int _sortBy = csContext.GetIntFromQueryString("sb", -1);
int _sortOrder = csContext.GetIntFromQueryString("d",-1);
if (_sortBy > -1)
sortBy = (SortThreadsBy) _sortBy;
if (_sortOrder > -1)
sortOrder = (SortOrder) _sortOrder;
}
#endregion
#region Events
public void Sort_Changed (Object sender, EventArgs e)
{
DataBind();
}
public void forumFilterddl_Changed (Object sender, EventArgs e)
{
DataBind();
}
public void RememberSortSettings_Click (Object sender, EventArgs e)
{
string forumSettings = (int) threadSortddl.SelectedValue + ":" + (int) sortOrderddl.SelectedValue + ":" + (int) dateFilter.SelectedValue + ":" + hideReadPosts.SelectedValue.ToString().Substring(0,1) + ":" + (int) filterUsers.SelectedValue;
UserCookie userCookie = new UserCookie( csContext.User );
userCookie.SaveForumOptions(csContext.ForumID, forumSettings);
Sort_Changed(sender, e);
}
#endregion
#region Databinding
public override void DataBind()
{
DateTime dateFilterValue;
int forumID = -1;
if ((forum != null) && (forum.SectionID > 0))
forumID = forum.SectionID;
else
if(mode != ThreadViewMode.PrivateMessages)
forumID = forumFilterddl.SelectedForum;
if (dateFilter.SelectedValue == ThreadDateFilterMode.LastVisit)
dateFilterValue = CSContext.Current.User.GetUserCookie().LastVisit;
else
dateFilterValue = dateFilter.SelectedDate;
// Get a populated thread set
//
switch (mode)
{
case ThreadViewMode.Active:
threadSet = Threads.GetThreads(forumID, pager.PageIndex, pager.PageSize, csContext.User, dateFilterValue, threadSortddl.SelectedValue, SortOrder.Descending, ThreadStatus.NotSet, filterUsers.SelectedValue, true, hideReadPosts.SelectedValue, false, true);
// Do we have data?
//
if (threadSet.Threads.Count == 0)
{
throw new CSException(CSExceptionType.ForumNoActivePosts);
}
break;
case ThreadViewMode.Unanswered:
threadSet = Threads.GetThreads(forumID, pager.PageIndex, pager.PageSize, csContext.User, dateFilterValue, threadSortddl.SelectedValue, sortOrderddl.SelectedValue, ThreadStatus.NotSet, filterUsers.SelectedValue, false, hideReadPosts.SelectedValue, true, true);
// Do we have data?
//
if (threadSet.Threads.Count == 0)
{
throw new CSException(CSExceptionType.ForumNoUnansweredPosts);
}
break;
case ThreadViewMode.NotRead:
threadSet = Threads.GetThreads(forumID, pager.PageIndex, pager.PageSize, csContext.User, DateTime.Now.AddDays(-7), threadSortddl.SelectedValue, sortOrderddl.SelectedValue, ThreadStatus.NotSet, filterUsers.SelectedValue, false, true, false, true);
// Do we have data?
//
if (threadSet.Threads.Count == 0) {
throw new CSException(CSExceptionType.ForumNoUnreadPosts);
}
break;
case ThreadViewMode.MyForums:
threadSet = Threads.GetThreads(forumID, pager.PageIndex, pager.PageSize, CSContext.Current.User, dateFilterValue, threadSortddl.SelectedValue, sortOrderddl.SelectedValue, ThreadStatus.NotSet, ThreadUsersFilter.HideTopicsParticipatedIn, false, hideReadPosts.SelectedValue, false, true);
// Do we have data?
//
if (threadSet.Threads.Count == 0)
{
throw new CSException(CSExceptionType.ForumNoUnreadPosts);
}
break;
case ThreadViewMode.PrivateMessages:
threadSet = Threads.GetThreads(0, pager.PageIndex, pager.PageSize, csContext.User, dateFilterValue, threadSortddl.SelectedValue, sortOrderddl.SelectedValue, ThreadStatus.NotSet, ThreadUsersFilter.All, false, false, false, true);
break;
default:
if (forumID > 0)
threadSet = Threads.GetThreads(forumID, pager.PageIndex, pager.PageSize, csContext.User, dateFilterValue, threadSortddl.SelectedValue, sortOrderddl.SelectedValue, ThreadStatus.NotSet, filterUsers.SelectedValue, false, hideReadPosts.SelectedValue, false, true);
else
throw new CSException(CSExceptionType.SectionNotFound);
break;
}
if ((threadSet.Announcements.Count > 0) && (mode != ThreadViewMode.Unanswered) && (mode != ThreadViewMode.Active) )
{
announcements.DataSource = threadSet.Announcements;
announcements.DataBind();
}
else if ( (mode != ThreadViewMode.Unanswered) && (mode != ThreadViewMode.Active) )
{
announcements.DataSource = null;
announcements.DataBind();
}
// Do we have posts to display?
//
if (threadSet.Threads.Count > 0)
{
threads.DataSource = threadSet.Threads;
threads.DataBind();
}
else
{
threads.DataSource = null;
threads.DataBind();
}
// Do we have announcements or threads?
//
if ((threads.DataSource == null) && (announcements.DataSource == null))
{
noThreadsToDisplay.Visible = true;
}
else
{
noThreadsToDisplay.Visible = false;
}
pager.TotalRecords = currentPage.TotalRecords = threadSet.TotalRecords;
currentPage.TotalPages = pager.CalculateTotalPages();
currentPage.PageIndex = pager.PageIndex;
}
#endregion
#region Public Properties
/// <value>
/// Controls the mode that the thread view control displays
/// </value>
public ThreadViewMode ThreadViewMode
{
get
{
return mode;
}
set
{
mode = value;
}
}
#endregion
/// <summary>
/// Added to handle Username displaying
/// </summary>
protected void Threads_ItemDataBound (Object Sender, RepeaterItemEventArgs e) {
Thread thread = e.Item.DataItem as Thread;
if (thread == null)
return;
bool isAnonymousPostingEnabled = thread.IsAnonymousPost &&
CSContext.Current.SiteSettings.EnableUserPostingAsAnonymous &&
thread.Forum.EnableAnonymousPostingForUsers;
switch (e.Item.ItemType) {
case ListItemType.Item:
case ListItemType.AlternatingItem:
Label userName = e.Item.FindControl( "UsernameLink" ) as Label;
if (userName != null) {
userName.Text = Formatter.FormatUsername( thread.AuthorID, thread.Username, isAnonymousPostingEnabled, true );
}
break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -