using System; using CMS.CMSHelper; using CMS.GlobalHelper; using CMS.PortalControls; using CMS.PortalEngine; using CMS.UIControls; using CMS.DocumentEngine; public partial class CMSModules_Widgets_Controls_WidgetSelector : CMSAdminControl { #region "Variables" private string mAliasPath = String.Empty; protected int mPageTemplateId = 0; private string mZoneId = String.Empty; private bool mIsInline = false; private WidgetZoneTypeEnum mZoneType = WidgetZoneTypeEnum.None; private string mCultureCode = null; #endregion #region "Widget selector properties" /// /// Zone type. /// public WidgetZoneTypeEnum ZoneType { get { return mZoneType; } set { mZoneType = value; } } /// /// Page alias path of document where widget shoudld be placed. /// public string AliasPath { get { return mAliasPath; } set { mAliasPath = value; } } /// /// Preferred culture code to use along with alias path. /// public string CultureCode { get { if (string.IsNullOrEmpty(mCultureCode)) { mCultureCode = CMSContext.PreferredCultureCode; } return mCultureCode; } set { mCultureCode = value; } } /// /// Page template ID. /// public int PageTemplateId { get { return mPageTemplateId; } set { mPageTemplateId = value; } } /// /// Gets or sets the ID of webpart(widget) zone where selected widget shoudld be placed. /// public string ZoneId { get { return mZoneId; } set { mZoneId = value; } } /// /// Gets or sets whether selector is loaded for inline widgets. /// public bool IsInline { get { return mIsInline; } set { mIsInline = value; } } /// /// Gets the value that indicates whether selector is loaded for dashboard widgets. /// public bool IsDashboard { get { if (PageTemplateId > 0) { PageTemplateInfo pti = PageTemplateInfoProvider.GetPageTemplateInfo(PageTemplateId); if ((pti != null) && (pti.PageTemplateType == PageTemplateTypeEnum.Dashboard)) { PortalContext.SetRequestViewMode(ViewModeEnum.DashboardWidgets); return true; } } return false; } } #endregion #region "Selector properties" /// /// Gets or set the flat panel selected item. /// public string SelectedItem { get { return flatElem.SelectedItem; } set { flatElem.SelectedItem = value; } } /// /// Gets or sets name of javascript function used for passing selected value from flat selector. /// public string SelectFunction { get { return flatElem.UniFlatSelector.SelectFunction; } set { flatElem.UniFlatSelector.SelectFunction = value; } } /// /// If enabled, flat selector remembers selected item trough postbacks. /// public bool RememberSelectedItem { get { return flatElem.UniFlatSelector.RememberSelectedItem; } set { flatElem.UniFlatSelector.RememberSelectedItem = value; } } /// /// Enables or disables stop processing. /// public override bool StopProcessing { get { return base.StopProcessing; } set { base.StopProcessing = value; flatElem.StopProcessing = value; treeElem.StopProcessing = value; EnableViewState = !value; } } /// /// Indicates if control is used on live site. /// public override bool IsLiveSite { get { return base.IsLiveSite; } set { base.IsLiveSite = value; treeElem.IsLiveSite = value; flatElem.IsLiveSite = value; } } #endregion #region "Page methods and events" /// /// OnInit. /// protected override void OnInit(EventArgs e) { base.OnInit(e); treeElem.SelectPath = "/"; } /// /// Page load. /// protected void Page_Load(object sender, EventArgs e) { if (StopProcessing) { return; } treeElem.OnItemSelected += treeElem_OnItemSelected; if (!RequestHelper.IsPostBack()) { // Select root by default ResetToDefault(); } // Different behavior of flat selector for different group zones if (IsInline) { // Inline widget flatElem.SelectInlineWidgets = true; treeElem.SelectInlineWidgets = true; } else if (IsDashboard) { // Dashboard zone flatElem.SelectDashboardWidgets = true; treeElem.SelectDashboardWidgets = true; } else if (!String.IsNullOrEmpty(ZoneId)) { // Get pageinfo PageInfo pi = null; try { pi = CMSWebPartPropertiesPage.GetPageInfo(AliasPath, PageTemplateId, CultureCode); } catch (PageNotFoundException) { // Do not throw exception if page info not found (e.g. bad alias path) } PageTemplateInstance templateInstance = CMSPortalManager.GetTemplateInstanceForEditing(pi); if (templateInstance != null) { WidgetZoneTypeEnum zoneType = ZoneType; // Get settings of the zone if present in the template WebPartZoneInstance zone = templateInstance.GetZone(ZoneId); if ((zoneType == WidgetZoneTypeEnum.None) && (zone != null)) { zoneType = zone.WidgetZoneType; } // Set flags to flat element by type of widget zone if (zoneType == WidgetZoneTypeEnum.Group) { flatElem.SelectGroupWidgets = true; treeElem.SelectGroupWidgets = true; flatElem.GroupID = pi.NodeGroupID; } else if (zoneType == WidgetZoneTypeEnum.User) { flatElem.SelectUserWidgets = true; treeElem.SelectUserWidgets = true; } else if (zoneType == WidgetZoneTypeEnum.Editor) { flatElem.SelectEditorWidgets = true; treeElem.SelectEditorWidgets = true; } } } } /// /// Page prerender. /// protected void Page_PreRender(object sender, EventArgs e) { if (StopProcessing) { return; } // Pass currently selected category to flat selector if (RequestHelper.IsPostBack()) { flatElem.TreeSelectedItem = treeElem.SelectedItem; } } /// /// On tree element item selected. /// /// Selected value protected void treeElem_OnItemSelected(string selectedValue) { flatElem.TreeSelectedItem = selectedValue; // Clear search box and pager flatElem.UniFlatSelector.ResetToDefault(); } #endregion #region "Methods" /// /// Reloads data. /// /// If true, flat selector is reloaded public override void ReloadData(bool reloadFlat) { treeElem.ReloadData(); if (reloadFlat) { flatElem.ReloadData(); } } /// /// Selects root category in tree, clears search condition and resets pager to first page. /// public void ResetToDefault() { // Select root by default WidgetCategoryInfo wci = WidgetCategoryInfoProvider.GetWidgetCategoryInfo("/"); if (wci != null) { flatElem.SelectedCategory = wci; // Select and expand root node treeElem.SelectedItem = wci.WidgetCategoryID.ToString(); treeElem.SelectPath = "/"; } // Clear search condition and resets pager to first page flatElem.UniFlatSelector.ResetToDefault(); } #endregion }