using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using CMS.CMSHelper; using CMS.GlobalHelper; using CMS.PortalEngine; using CMS.SettingsProvider; using CMS.UIControls; public partial class CMSModules_PortalEngine_Controls_WebParts_WebPartFlatSelector : CMSAdminControl { #region "Variables" private string mSelectedItem = string.Empty; private WebPartCategoryInfo mSelectedCategory = null; private string mTreeSelectedItem = null; private bool mShowWidgetOnlyWebparts = false; #endregion #region "Flat selector properties" /// /// Indicates whether webpart of type "Widget only" will be displayed in selector. /// public bool ShowWidgetOnlyWebparts { get { return mShowWidgetOnlyWebparts; } set { mShowWidgetOnlyWebparts = value; } } /// /// Returns inner instance of UniFlatSelector control. /// public UniFlatSelector UniFlatSelector { get { return flatElem; } } /// /// Gets or sets selected item in flat selector. /// public string SelectedItem { get { return flatElem.SelectedItem; } set { flatElem.SelectedItem = value; } } /// /// Gets or sets the current webpart category. /// public WebPartCategoryInfo SelectedCategory { get { // If not loaded yet if (mSelectedCategory == null) { int categoryId = ValidationHelper.GetInteger(TreeSelectedItem, 0); if (categoryId > 0) { mSelectedCategory = WebPartCategoryInfoProvider.GetWebPartCategoryInfoById(categoryId); } } return mSelectedCategory; } set { mSelectedCategory = value; // Update ID if (mSelectedCategory != null) { mTreeSelectedItem = mSelectedCategory.CategoryID.ToString(); } } } /// /// Gets or sets the selected item in tree, usually the category id. /// public string TreeSelectedItem { get { return mTreeSelectedItem; } set { // Clear loaded category if change if (value != mTreeSelectedItem) { mSelectedCategory = null; } mTreeSelectedItem = value; } } /// /// Indicates if the control should perform the operations. /// public override bool StopProcessing { get { return base.StopProcessing; } set { base.StopProcessing = value; flatElem.StopProcessing = value; EnableViewState = !value; } } #endregion #region "Page events" protected void Page_Load(object sender, EventArgs e) { if (StopProcessing) { return; } // Setup flat selector flatElem.QueryName = "cms.webpart.selectall"; flatElem.ValueColumn = "WebPartID"; flatElem.SearchLabelResourceString = "webpart.webpartname"; flatElem.SearchColumn = "WebPartDisplayName"; flatElem.SelectedColumns = "WebPartName, WebPartThumbnailGUID, WebPartDisplayName, WebPartID, WebPartSkipInsertProperties"; flatElem.SkipPropertiesDialogColumn = "WebPartSkipInsertProperties"; flatElem.OrderBy = "WebPartDisplayName"; flatElem.NotAvailableImageUrl = GetImageUrl("Objects/CMS_WebPart/notavailable.png"); flatElem.NoRecordsMessage = "webparts.norecordsincategory"; flatElem.NoRecordsSearchMessage = "webparts.norecords"; flatElem.SearchCheckBox.Visible = true; flatElem.SearchCheckBox.Text = GetString("webparts.searchindescription"); if (!URLHelper.IsPostback()) { // Search in description default value flatElem.SearchCheckBox.Checked = false; } if (flatElem.SearchCheckBox.Checked) { flatElem.SearchColumn += ";WebPartDescription"; } flatElem.OnItemSelected += new UniFlatSelector.ItemSelectedEventHandler(flatElem_OnItemSelected); } /// /// On PreRender. /// protected override void OnPreRender(EventArgs e) { if (StopProcessing) { return; } if (!ShowWidgetOnlyWebparts) { // Do not display widget only web parts flatElem.WhereCondition = SqlHelperClass.AddWhereCondition(flatElem.WhereCondition, "WebPartType IS NULL OR WebPartType != " + Convert.ToInt32(WebPartTypeEnum.WidgetOnly)); } // Restrict to items in selected category (if not root) if (SelectedCategory != null) { flatElem.WhereCondition = SqlHelperClass.AddWhereCondition(flatElem.WhereCondition, "WebPartCategoryID = " + SelectedCategory.CategoryID + " OR WebPartCategoryID IN (SELECT CategoryID FROM CMS_WebPartCategory WHERE CategoryPath LIKE N'" + SqlHelperClass.GetSafeQueryString(SelectedCategory.CategoryPath, false).TrimEnd('/') + "/%')"); } // Recently used if (TreeSelectedItem.ToLowerCSafe() == "recentlyused") { flatElem.WhereCondition = SqlHelperClass.AddWhereCondition(flatElem.WhereCondition, SqlHelperClass.GetWhereCondition("WebPartName", CMSContext.CurrentUser.UserSettings.UserUsedWebParts.Split(';'))); } // Description area and recently used litCategory.Text = ShowInDescriptionArea(SelectedItem); base.OnPreRender(e); } #endregion #region "Event handling" /// /// Updates description after item is selected in flat selector. /// protected string flatElem_OnItemSelected(string selectedValue) { return ShowInDescriptionArea(selectedValue); } #endregion #region "Methods" /// /// Reloads data. /// public override void ReloadData() { flatElem.ReloadData(); flatElem.ResetToDefault(); pnlUpdate.Update(); } /// /// Generates HTML text to be used in description area. /// ///Selected item for which generate description private string ShowInDescriptionArea(string selectedValue) { string name = String.Empty; string description = String.Empty; if (!String.IsNullOrEmpty(selectedValue)) { int webpartId = ValidationHelper.GetInteger(selectedValue, 0); WebPartInfo wi = WebPartInfoProvider.GetWebPartInfo(webpartId); if (wi != null) { name = wi.WebPartDisplayName; description = wi.WebPartDescription; } } // No selection show selected category else if (SelectedCategory != null) { name = SelectedCategory.CategoryDisplayName; } // Recently used else { name = GetString("webparts.recentlyused"); } string text = "
" + HTMLHelper.HTMLEncode(ResHelper.LocalizeString(name)) + "
"; if (description != null) { text += "
" + HTMLHelper.HTMLEncode(ResHelper.LocalizeString(description)) + "
"; } return text; } #endregion }