📄 threadview.cs
字号:
public void RememberThreadFilterSettings_Click(Object sender, EventArgs e)
{
// Save changed thread filter settings
//
// Save in cookie
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.SectionID, forumSettings );
// Use remembered user filter just in case
//
authUseLocalFilter = false;
// Update filtering field values
//
this.SetFilteringFieldValues();
// DB save of Email Notification value
//
if (ddlTracking != null && !ddlTracking.AutoPostBack)
{
ThreadTracking.SetSectionSubscriptionType( csContext.SectionID, (EmailSubscriptionType) Int32.Parse( ddlTracking.SelectedValue ) );
}
DataBind();
}
#endregion
#region Threads_ItemDataBound
/// <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 &&
ForumConfiguration.Instance().EnableUserPostingAsAnonymous &&
thread.Forum.EnableAnonymousPostingForUsers;
switch (e.Item.ItemType)
{
case ListItemType.Item:
case ListItemType.AlternatingItem:
IText userName = TextControlHelper.Create(e.Item.FindControl( "UsernameLink" ));
if (userName != null)
{
userName.Text = Formatter.FormatUsername( thread.AuthorID, thread.Username, isAnonymousPostingEnabled, false, thread.ThreadShouldBeIgnored );
}
ThreadStatusImage statusImage = e.Item.FindControl( "ThreadItemStatusImage" ) as ThreadStatusImage;
if (statusImage != null &&
forum != null &&
!forum.EnableThreadStatus)
{
//statusImage.ThreadStatus = ThreadStatus.NotSet;
statusImage.Visible = false;
}
break;
}
}
#endregion
#region MoveThreads_OnClick
protected void MoveThreads_OnClick(object sender, EventArgs e)
{
// Update filtering field values
//
this.SetFilteringFieldValues();
string threadsToMove = String.Empty;
foreach (RepeaterItem item in threads.Items)
{
MoveThreadCheckBox chkMove = (MoveThreadCheckBox)item.FindControl("moveThisThread");
if (chkMove != null &&
chkMove.Checked)
{
threadsToMove += chkMove.Value + ",";
}
}
if (threadsToMove.Length > 0)
{
// If there are threads to move, chop off the trailing comma.
threadsToMove = threadsToMove.TrimEnd( ',' );
// Redirect to the ThreadsMove page.
HttpContext.Current.Response.Redirect(Globals.GetSiteUrls().ModerateThreadsMove(threadsToMove, HttpContext.Current.Request.Url.ToString()), true);
}
}
#endregion
#endregion
#region Internal Helpers
#region SetFilteringControlValues
/// <summary>
/// Update filtering controls' values.
/// </summary>
private void SetFilteringControlValues ()
{
// Set filters
//
this.LoadThreadListFilter();
// Adjust visibility for some of them if
// we have an anonymous user.
//
if (csContext.User.IsAnonymous)
{
if (filterUsers != null)
filterUsers.Visible = false;
if (hideReadPosts != null)
hideReadPosts.Visible = false;
if (rememberSettingsButton != null)
rememberSettingsButton.Visible = false;
if (filterTopicRow != null)
filterTopicRow.Visible = false;
if (emailNotificationRow != null)
emailNotificationRow.Visible = false;
}
// Set the following values anyway
//
if (dateFilter != null)
dateFilter.SelectedValue = dateFilterMode; //.Items.FindByValue( ((int) dateFilterMode).ToString() ).Selected = true;
if (threadSortddl != null)
threadSortddl.SelectedValue = sortBy;
if (threadSortddl != null)
sortOrderddl.SelectedValue = sortOrder;
// Set values if authenticated only
//
if (!csContext.User.IsAnonymous)
{
if (hideReadPosts != null)
hideReadPosts.SelectedValue = hideReadPost;
if (filterUsers != null)
filterUsers.SelectedValue = userFilter;
}
}
#endregion
#region SetFilteringFieldValues
/// <summary>
/// Update filtering field's values.
/// </summary>
private void SetFilteringFieldValues ()
{
if (dateFilter != null)
dateFilterMode = dateFilter.SelectedValue;
if (threadSortddl != null)
sortBy = threadSortddl.SelectedValue;
if (threadSortddl != null)
sortOrder = sortOrderddl.SelectedValue;
// Those are for authenticated users only
//
if (!csContext.User.IsAnonymous)
{
if (hideReadPosts != null)
hideReadPost = hideReadPosts.SelectedValue;
if (filterUsers != null)
userFilter = filterUsers.SelectedValue;
}
}
#endregion
#region LoadThreadListFilter
/// <summary>
/// Init filtering values based on user's credentials.
/// </summary>
private void LoadThreadListFilter ()
{
// Load query string values.
// We do not care if user is authenticated or not.
// This will make the code simpler.
//
LoadQuerystringFilter();
// We have to check if we want to use local set filter or
// the previous remembered one.
//
if (!csContext.User.IsAnonymous &&
!authUseLocalFilter)
{
// If we have an authenticated user try to
// get filer constraint form its cookie.
// Otherwise load it form the query string as well.
//
UserCookie cookie = new UserCookie( csContext.User );
ForumUserOptions options = cookie.GetForumOptions( csContext.SectionID );
if (options.HasSettings)
{
dateFilterMode = options.DateFilter;
sortBy = options.SortBy;
sortOrder = options.SortOrder;
userFilter = options.UserFilter;
hideReadPost = options.HideReadPosts;
}
}
}
#endregion
#region LoadQuerystringFilter
/// <summary>
/// Load filtering values form query string.
/// Also validate it.
/// </summary>
private void LoadQuerystringFilter ()
{
// Date filter
int _dateFilter = csContext.GetIntFromQueryString( "df", -1 );
if ((_dateFilter > -1) &&
(_dateFilter >= (int) ThreadDateFilterMode.LastVisit) &&
(_dateFilter <= (int) ThreadDateFilterMode.All))
{
dateFilterMode = (ThreadDateFilterMode) _dateFilter;
}
else
{
// Get default config value
dateFilterMode = csContext.SiteSettings.DefaultThreadDateFilter;
}
// Sort by
int _sortBy = csContext.GetIntFromQueryString( "sb", -1 );
if ((_sortBy > -1) &&
(_sortBy >= (int) SortThreadsBy.LastPost) &&
(_sortBy <= (int) SortThreadsBy.Subject))
{
sortBy = (SortThreadsBy) _sortBy;
}
else
{
sortBy = SortThreadsBy.LastPost;
}
// Sort order
int _sortOrder = csContext.GetIntFromQueryString( "d", -1 );
if ((_sortOrder > -1) &&
(_sortOrder == (int) SortOrder.Ascending ||
_sortOrder == (int) SortOrder.Descending))
{
sortOrder = (SortOrder) _sortOrder;
}
else
{
sortOrder = SortOrder.Descending;
}
/*
if (csContext.User.IsAnonymous)
return;
*/
// User filter
int _userFilter = csContext.GetIntFromQueryString( "uf", -1 );
if ((_userFilter > -1) &&
(_userFilter >= (int) ThreadUsersFilter.All) &&
(_userFilter <= (int) ThreadUsersFilter.HideTopicsByNonAnonymousUsers))
{
userFilter = (ThreadUsersFilter) _userFilter;
}
else
{
userFilter = ThreadUsersFilter.All;
}
// Hide read posts
int _hideReadPost = csContext.GetIntFromQueryString( "hrp", -1 );
if ((_hideReadPost > -1) &&
(_hideReadPost == 0 ||
_hideReadPost == 1))
{
hideReadPost = Convert.ToBoolean( _hideReadPost );
}
else
{
hideReadPost = false;
}
// Use local filter in exchange of user set filter
int _authUseLocalSettings = csContext.GetIntFromQueryString( "lf", -1 );
if ((_authUseLocalSettings > -1) &&
(_authUseLocalSettings == 0 ||
_authUseLocalSettings == 1))
{
authUseLocalFilter = Convert.ToBoolean( _authUseLocalSettings );
}
else
{
authUseLocalFilter = false;
}
}
#endregion
#region BuildQuerystringFilter
/// <summary>
/// Add filtering values as query string params to the provided base url.
/// </summary>
private string BuildQuerystringFilter (string baseUrl, ThreadViewMode mode)
{
string qsFilter = "";
string linkQsChar = "?"; // default
// Try to figure out if url is rewrited
// to set the link char between provided base url
// and our new query string params.
//
if (baseUrl.IndexOf( "?", 0 ) > 1)
{
linkQsChar = "&";
}
// Is an anonymous user?
//
if (csContext.User.IsAnonymous)
{
qsFilter = string.Format( anonymousQuerystringFilter,
"{0}",
(int) sortBy,
(int) sortOrder,
(int) dateFilterMode
);
}
else
{
// Which thread view mode?
//
switch (mode)
{
case ThreadViewMode.PrivateMessages:
qsFilter = string.Format( anonymousQuerystringFilter,
"{0}",
(int) sortBy,
(int) sortOrder,
(int) dateFilterMode
);
break;
//case ThreadViewMode.MyForums:
default:
qsFilter = string.Format( authQuerystringFilter,
"{0}",
(int) sortBy,
(int) sortOrder,
(int) dateFilterMode,
(int) userFilter,
((hideReadPost == true) ? 1 : 0),
((authUseLocalFilter == true) ? 1 : 0)
);
break;
}
}
return RemoveDuplicateQueryStringParameters(baseUrl + linkQsChar + qsFilter);
}
private string RemoveDuplicateQueryStringParameters(string url)
{
string path = url.Substring(0, url.IndexOf("?") + 1);
string queryString = url.Substring(url.IndexOf("?") + 1);
System.Collections.ArrayList paramNames = new System.Collections.ArrayList();
System.Collections.ArrayList paramPairs = new System.Collections.ArrayList();
string[] pairs = queryString.Split('&');
foreach (string pair in pairs)
{
string[] items = pair.Split('=');
if (!paramNames.Contains(items[0]))
{
paramNames.Add(items[0]);
paramPairs.Add(pair);
}
}
return path + string.Join("&", (string[])paramPairs.ToArray(typeof(string)));
}
#endregion
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -