using System; using System.Web; using System.Web.UI; using CMS.CMSHelper; using CMS.GlobalHelper; using CMS.ISearchEngine; using CMS.PortalControls; using CMS.PortalEngine; using CMS.SettingsProvider; using CMS.WebAnalytics; public partial class CMSWebParts_Search_cmssearchbox : CMSAbstractWebPart { // Result page url protected string mResultPageUrl = URLHelper.CurrentURL; #region "Public properties" /// /// Gets or sets the value that indicates whether image button is displayed instead of regular button. /// public bool ShowImageButton { get { return ValidationHelper.GetBoolean(GetValue("ShowImageButton"), false); } set { SetValue("ShowImageButton", value); btnGo.Visible = !value; btnImageButton.Visible = value; } } /// /// Gets or sets an Image button URL. /// public string ImageUrl { get { return ResolveUrl(ValidationHelper.GetString(GetValue("ImageUrl"), btnImageButton.ImageUrl)); } set { SetValue("ImageUrl", value); btnImageButton.ImageUrl = value; } } /// /// Gets or sets the value that indicates whether search label is displayed. /// public bool ShowSearchLabel { get { return ValidationHelper.GetBoolean(GetValue("ShowSearchLabel"), lblSearch.Visible); } set { SetValue("ShowSearchLabel", value); lblSearch.Visible = value; } } /// /// Gets or sets the search label text. /// public string SearchLabelText { get { return DataHelper.GetNotEmpty(GetValue("SearchLabelText"), ResHelper.LocalizeString("{$WebPart.SearchBox.Label$}")); } set { SetValue("SearchLabelText", value); lblSearch.Text = value; } } /// /// Gets or sets the search button text. /// public string SearchButtonText { get { return DataHelper.GetNotEmpty(GetValue("SearchButtonText"), ResHelper.LocalizeString("{$WebPart.SearchBox.Button$}")); } set { SetValue("SearchButtonText", value); btnGo.Text = value; } } /// /// Gets or sets the search label Css class. /// public string SearchLabelCssClass { get { return ValidationHelper.GetString(GetValue("SearchLabelCssClass"), ""); } set { SetValue("SearchLabelCssClass", value); lblSearch.CssClass = value; } } /// /// Gets or sets search text box CSS class. /// public string SearchTextboxCssClass { get { return ValidationHelper.GetString(GetValue("SearchTextboxCssClass"), ""); } set { SetValue("SearchTextboxCssClass", value); txtWord.CssClass = value; } } /// /// Gets or sets the search button CSS class. /// public string SearchButtonCssClass { get { return ValidationHelper.GetString(GetValue("SearchButtonCssClass"), ""); } set { SetValue("SearchButtonCssClass", value); btnGo.CssClass = value; btnImageButton.CssClass = value; } } /// /// Gets or sets the search results page URL. /// public string SearchResultsPageUrl { get { return DataHelper.GetNotEmpty(GetValue("SearchResultsPageUrl"), mResultPageUrl); } set { SetValue("SearchResultsPageUrl", value); mResultPageUrl = value; } } /// /// Gets or sets the Search mode. /// public SearchModeEnum SearchMode { get { return SearchHelper.GetSearchModeEnum(ValidationHelper.GetString(GetValue("SearchMode"), "")); } set { SetValue("SearchMode", value.ToString()); } } /// /// Gets or sets the Skin ID. /// public override string SkinID { get { return base.SkinID; } set { base.SkinID = value; // Set SkinID properties if (PageCycle < PageCycleEnum.Initialized) { lblSearch.SkinID = value; txtWord.SkinID = value; btnGo.SkinID = value; btnImageButton.SkinID = value; } } } #endregion /// /// Page load. /// protected void Page_Load(object sender, EventArgs e) { SetupControl(); } /// /// Initializes the control properties. /// protected void SetupControl() { if (StopProcessing) { } else { btnGo.Visible = !ShowImageButton; btnImageButton.Visible = ShowImageButton; pnlSearch.DefaultButton = btnGo.Visible ? btnGo.ID : btnImageButton.ID; btnImageButton.ImageUrl = ImageUrl; btnImageButton.AlternateText = GetString("General.search"); // Set label visibility according to WAI standards if (!ShowSearchLabel) { lblSearch.Style.Add("display", "none"); } // Set text properties lblSearch.Text = SearchLabelText; btnGo.Text = SearchButtonText; // Set class properties lblSearch.CssClass = SearchLabelCssClass; txtWord.CssClass = SearchTextboxCssClass; btnGo.CssClass = SearchButtonCssClass; btnImageButton.CssClass = SearchButtonCssClass; // Set result page mResultPageUrl = SearchResultsPageUrl; // Set SkinID properties if (!StandAlone && (PageCycle < PageCycleEnum.Initialized) && (ValidationHelper.GetString(Page.StyleSheetTheme, string.Empty) == string.Empty)) { string skinId = SkinID; lblSearch.SkinID = skinId; txtWord.SkinID = skinId; btnGo.SkinID = skinId; btnImageButton.SkinID = skinId; } } } /// /// Applies given stylesheet skin. /// public override void ApplyStyleSheetSkin(Page page) { string skinId = SkinID; lblSearch.SkinID = skinId; txtWord.SkinID = skinId; btnGo.SkinID = skinId; btnImageButton.SkinID = skinId; base.ApplyStyleSheetSkin(page); } /// /// Button search handler. /// protected void btnGo_Click(object sender, EventArgs e) { Search(); } /// /// Image button search handler. /// protected void btnImageButton_Click(object sender, ImageClickEventArgs e) { Search(); } /// /// Runs the search. /// private void Search() { if (!string.IsNullOrEmpty(txtWord.Text)) { string url = SearchResultsPageUrl; if (url.StartsWithCSafe("~")) { url = ResolveUrl(url.Trim()); } if (url.Contains("?")) { url = URLHelper.RemoveParameterFromUrl(url, "searchtext"); url = URLHelper.RemoveParameterFromUrl(url, "searchMode"); } url = URLHelper.AddParameterToUrl(url, "searchtext", HttpUtility.UrlEncode(txtWord.Text)); url = URLHelper.AddParameterToUrl(url, "searchMode", SearchMode.ToString()); // Log "internal search" activity Activity internalSearch = new ActivityInternalSearch(txtWord.Text, CMSContext.CurrentDocument, CMSContext.ActivityEnvironmentVariables); internalSearch.Log(); URLHelper.Redirect(url.Trim()); } } }