⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threadview.cs

📁 community server 源码
💻 CS
📖 第 1 页 / 共 3 页
字号:
        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 + -