HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/RMourik/bassol.nl/CMS/CMSWebParts/Forums/Search/ForumExtendedSearchDialog.ascx.cs
using System;
using System.Data;
using System.Web;
using System.Web.UI.WebControls;

using CMS.DataEngine;
using CMS.DocumentEngine;
using CMS.Forums;
using CMS.Helpers;
using CMS.PortalControls;
using CMS.Base;
using CMS.SiteProvider;
using CMS.WebAnalytics;

public partial class CMSWebParts_Forums_Search_ForumExtendedSearchDialog : CMSAbstractWebPart
{
    #region "Public properties"

    /// <summary>
    /// Gets or sets the value that indicates whether user can select forums to search.
    /// </summary>
    public bool EnableForumSelection
    {
        get
        {
            return ValidationHelper.GetBoolean(GetValue("EnableForumSelection"), true);
        }
        set
        {
            SetValue("EnableForumSelection", value);
        }
    }


    /// <summary>
    /// Gets or sets the URL where is the search result web part.
    /// </summary>
    public string RedirectUrl
    {
        get
        {
            return ValidationHelper.GetString(GetValue("RedirectUrl"), "");
        }
        set
        {
            SetValue("RedirectUrl", value);
        }
    }


    /// <summary>
    /// Gets or sets forum groups which are displayed in forum selection.
    /// </summary>
    public string ForumGroups
    {
        get
        {
            return ValidationHelper.GetString(GetValue("ForumGroups"), "");
        }
        set
        {
            SetValue("ForumGroups", value);
        }
    }


    /// <summary>
    /// Indicates whether the web part should be hidden for result page.
    /// </summary>
    public bool HideForResult
    {
        get
        {
            return ValidationHelper.GetBoolean(GetValue("HideForResult"), false);
        }
        set
        {
            SetValue("HideForResult", value);
        }
    }


    /// <summary>
    /// Gets or sets the value that indicates whether the forums for which the user has no permissions
    /// are visible in the list of forums in forum group.
    /// </summary>
    public bool HideForumForUnauthorized
    {
        get
        {
            return ValidationHelper.GetBoolean(GetValue("HideForumForUnauthorized"), false);
        }
        set
        {
            SetValue("HideForumForUnauthorized", value);
        }
    }

    #endregion


    #region "Methods"

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        if (!RequestHelper.IsPostBack())
        {
            // Fill the search-in options
            drpSearchIn.Items.Clear();
            drpSearchIn.Items.Add(new ListItem(GetString("ForumExtSearch.SubjAndText.Title"), "subjecttext"));
            drpSearchIn.Items.Add(new ListItem(GetString("ForumExtSearch.Subject.Title"), "subject"));
            drpSearchIn.Items.Add(new ListItem(GetString("ForumExtSearch.Text.Title"), "text"));
            drpSearchIn.SelectedIndex = 0;

            // Fill the order-by options
            drpSearchOrderBy.Items.Clear();
            drpSearchOrderBy.Items.Add(new ListItem(GetString("ForumExtSearch.PostTime.Title"), "posttime"));
            drpSearchOrderBy.Items.Add(new ListItem(GetString("general.subject"), "subject"));
            drpSearchOrderBy.Items.Add(new ListItem(GetString("ForumExtSearch.Author.Title"), "author"));
            drpSearchOrderBy.SelectedIndex = 0;

            // Initialize order buttons
            rblSearchOrder.Items.Clear();
            rblSearchOrder.Items.Add(new ListItem(GetString("ForumExtSearch.Ascending.Title"), "ascending"));
            rblSearchOrder.Items.Add(new ListItem(GetString("ForumExtSearch.Descending.Title"), "descending"));
            rblSearchOrder.SelectedIndex = 0;

            // Try to pre-select filter items
            PreSelectFilter();
        }
    }


    protected override void OnPreRender(EventArgs e)
    {
        if (Visible && !StopProcessing)
        {
            // Register tooltips script file
            ScriptHelper.RegisterTooltip(Page);
        }
        base.OnPreRender(e);
    }


    /// <summary>
    /// Content loaded event handler.
    /// </summary>
    public override void OnContentLoaded()
    {
        base.OnContentLoaded();
        InitControl();
    }


    /// <summary>
    /// Reloads the control data.
    /// </summary>
    public override void ReloadData()
    {
        base.ReloadData();
        InitControl();
    }


    #region "Private methods"

    /// <summary>
    /// Initializes control.
    /// </summary>
    private void InitControl()
    {
        // Check if the web part should be hidden for the search result page
        if (QueryHelper.Contains("searchtext") || QueryHelper.Contains("searchusername"))
        {
            if (HideForResult)
            {
                Visible = false;
            }
        }

        if (!StopProcessing && Visible)
        {
            // Initialize control
            SetupControl();
        }
    }


    /// <summary>
    /// Initializes the control properties.
    /// </summary>
    protected void SetupControl()
    {
        imgTextHint.ImageUrl = GetImageUrl("Design/Forums/hint.gif");
        imgTextHint.AlternateText = "Hint";
        ScriptHelper.AppendTooltip(imgTextHint, GetString("ForumSearch.SearchTextHint"), "help");

        btnSearch.Text = GetString("general.search");

        if (EnableForumSelection)
        {
            plcForums.Visible = true;
            string selected = ";" + QueryHelper.GetString("searchforums", "") + ";";
            bool allForums = QueryHelper.GetBoolean("allforums", false);

            ForumPostsDataSource fpd = new ForumPostsDataSource();
            fpd.CacheMinutes = 0;
            fpd.SelectedColumns = "GroupID, GroupDisplayName, ForumID, ForumDisplayName,GroupOrder, ForumOrder, ForumName ";
            fpd.Distinct = true;
            fpd.SelectOnlyApproved = false;
            fpd.SiteName = SiteContext.CurrentSiteName;

            string where = "(GroupGroupID IS NULL) AND (GroupName != 'adhocforumgroup') AND (ForumOpen=1)";

            // Get only selected forum groups
            if (!String.IsNullOrEmpty(ForumGroups))
            {
                string groups = "";
                foreach (string group in ForumGroups.Split(';'))
                {
                    groups += " '" + SqlHelper.GetSafeQueryString(group) + "',";
                }

                // Add new part to where condition
                where += " AND (GroupName IN (" + groups.TrimEnd(',') + "))";
            }

            if (HideForumForUnauthorized)
            {
                where = ForumInfoProvider.CombineSecurityWhereCondition(where, 0);
            }
            fpd.WhereCondition = where;

            fpd.OrderBy = "GroupOrder, ForumOrder ASC, ForumName ASC";

            DataSet ds = fpd.DataSource as DataSet;
            if (!DataHelper.DataSourceIsEmpty(ds))
            {
                int oldGroup = -1;
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    if (oldGroup != ValidationHelper.GetInteger(dr["GroupID"], 0))
                    {
                        ListItem li = new ListItem(ResHelper.LocalizeString(Convert.ToString(dr["GroupDisplayName"])), "");
                        li.Attributes.Add("disabled", "disabled");
                        if (!listForums.Items.Contains(li))
                        {
                            listForums.Items.Add(li);
                        }
                        oldGroup = ValidationHelper.GetInteger(dr["GroupID"], 0);
                    }

                    string forumId = Convert.ToString(dr["ForumID"]);
                    ListItem lif = new ListItem(" \xA0\xA0\xA0\xA0 " + ResHelper.LocalizeString(Convert.ToString(dr["ForumDisplayName"])), forumId);
                    if ((selected.Contains(";" + forumId + ";")) && (!allForums))
                    {
                        lif.Selected = true;
                    }

                    // On postback on ASPX 
                    if (!listForums.Items.Contains(lif))
                    {
                        listForums.Items.Add(lif);
                    }
                }
            }
        }
    }


    /// <summary>
    /// Validates search dialog entries and decides whether the search query should be generated.
    /// </summary>    
    private string ValidateSearchDialog()
    {
        // Check if minimum searching criteria were matched
        return string.IsNullOrEmpty(txtSearchText.Text) && string.IsNullOrEmpty(txtUserName.Text)
                   ? GetString("ForumExtSearch.Search.NothingToSearch")
                   : string.Empty;
    }


    /// <summary>
    /// Loads the settings from the querystring when search result page is the same where this control resides.
    /// </summary>
    private void PreSelectFilter()
    {
        // Get info from the query string
        string searchtext = QueryHelper.GetString("searchtext", "");
        string searchusername = QueryHelper.GetString("searchusername", "");
        string searchin = QueryHelper.GetString("searchin", "");
        string searchorderby = QueryHelper.GetString("searchorderby", "");
        string searchorder = QueryHelper.GetString("searchorder", "");

        // Load the selection
        txtSearchText.Text = (searchtext != "") ? searchtext : "";
        txtUserName.Text = (searchusername != "") ? searchusername : "";

        try
        {
            drpSearchIn.SelectedValue = searchin;
        }
        catch
        {
        }

        try
        {
            drpSearchOrderBy.SelectedValue = searchorderby;
        }
        catch
        {
        }

        try
        {
            rblSearchOrder.SelectedValue = searchorder;
        }
        catch
        {
        }
    }

    #endregion


    #region "Event handlers"

    protected void btnSearch_Click(object sender, EventArgs e)
    {
        string errMsg = ValidateSearchDialog();

        // Search dialog filled properly
        if (errMsg == string.Empty)
        {
            // Generate query string according search dialog selections
            string queryString = String.Empty;
            queryString += (!string.IsNullOrEmpty(txtSearchText.Text)) ? "searchtext=" + HttpUtility.UrlEncode(txtSearchText.Text) + "&" : "";
            queryString += (!string.IsNullOrEmpty(txtUserName.Text)) ? "searchusername=" + HttpUtility.UrlEncode(txtUserName.Text) + "&" : "";
            queryString += (!string.IsNullOrEmpty(drpSearchIn.SelectedValue)) ? "searchin=" + drpSearchIn.SelectedValue + "&" : "";
            queryString += (!string.IsNullOrEmpty(drpSearchOrderBy.SelectedValue)) ? "searchorderby=" + drpSearchOrderBy.SelectedValue + "&" : "";
            queryString += (!string.IsNullOrEmpty(rblSearchOrder.SelectedValue)) ? "searchorder=" + rblSearchOrder.SelectedValue + "&" : "";
            queryString = queryString.TrimEnd('&');

            if (EnableForumSelection)
            {
                string forQuery = "";
                bool allForums = false;

                // If no forum selected
                if (listForums.SelectedIndex < 0)
                {
                    allForums = true;
                    queryString += "&allforums=" + allForums;
                }

                foreach (ListItem li in listForums.Items)
                {
                    if ((li.Selected != allForums) && (li.Value != ""))
                    {
                        if (forQuery != "")
                        {
                            forQuery += ";";
                        }
                        forQuery += li.Value;
                    }
                }

                if (forQuery != "")
                {
                    queryString += "&searchforums=" + forQuery;
                }
            }

            // Log "internal search" activity
            Activity internalSearch = new ActivityInternalSearch(txtSearchText.Text, DocumentContext.CurrentDocument, AnalyticsContext.ActivityEnvironmentVariables);
            internalSearch.Log();

            // Redirect to the search result page
            if (!string.IsNullOrEmpty(RedirectUrl))
            {
                if (RedirectUrl.IndexOfCSafe("?") < 0)
                {
                    queryString = "?" + queryString;
                }

                URLHelper.Redirect(ResolveUrl(RedirectUrl) + queryString);
            }
            else
            {
                string url = RequestContext.CurrentURL;

                // Get rid of previous query string parameters
                if (url.IndexOfCSafe("?") > -1)
                {
                    url = URLHelper.RemoveParameterFromUrl(url, "searchtext");
                    url = URLHelper.RemoveParameterFromUrl(url, "searchusername");
                    url = URLHelper.RemoveParameterFromUrl(url, "searchin");
                    url = URLHelper.RemoveParameterFromUrl(url, "searchorderby");
                    url = URLHelper.RemoveParameterFromUrl(url, "searchorder");
                    url = URLHelper.RemoveParameterFromUrl(url, "searchforums");
                    url = URLHelper.RemoveParameterFromUrl(url, "forumid");
                    url = URLHelper.RemoveParameterFromUrl(url, "threadid");
                    url = URLHelper.RemoveParameterFromUrl(url, "thread");
                    url = URLHelper.RemoveParameterFromUrl(url, "postid");
                    url = URLHelper.RemoveParameterFromUrl(url, "mode");
                    url = URLHelper.RemoveParameterFromUrl(url, "replyto");
                    url = URLHelper.RemoveParameterFromUrl(url, "subscribeto");
                    url = URLHelper.RemoveParameterFromUrl(url, "page");
                    url = URLHelper.RemoveParameterFromUrl(url, "allforums");
                }

                // Append query string
                url = URLHelper.AppendQuery(url, queryString);

                //Redirect back to the current page
                URLHelper.Redirect(url);
            }
        }
        else
        {
            // Display error info to the user
            lblInfo.Text = errMsg;
            lblInfo.Visible = true;
        }
    }

    #endregion


    #endregion
}