using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Collections; using System.Collections.Generic; using System.Data; using CMS.CMSHelper; using CMS.GlobalHelper; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.UIControls; using Group = CMS.UIControls.UniMenuConfig.Group; public partial class CMSAdminControls_UI_UIProfiles_UIToolbar : CMSUserControl { #region "Variables" protected string preselectedItem = null; protected string mElementName = null; protected string mModuleName = null; protected string mTargetFrameset = null; #endregion #region "Properties" /// /// Gets or sets the value that indicates whether scroll panel should be used /// public bool DisableScrollPanel { get { return uniMenu.DisableScrollPanel; } set { uniMenu.DisableScrollPanel = value; } } /// /// Gets or sets the value that indicates whether specific CSS classes should be generated for each group element. /// public bool GenerateElementCssClass { get; set; } /// /// Gets or sets the value that indicates whether Edit icon in dev. mode should be displayed /// public bool DisableEditIcon { get; set; } /// /// Returns the UIElementInfo representing the first button of first group displayed. /// public UIElementInfo FirstUIElement { get { return uniMenu.FirstUIElement; } } /// /// Returns the UIElementInfo representing the explicitly highlighted UI element. /// public UIElementInfo HighlightedUIElement { get { return uniMenu.HighlightedUIElement; } } /// /// Returns the UIElementInfo representing the selected (either explicitly highlighted or first) UI element. /// public UIElementInfo SelectedUIElement { get { return uniMenu.SelectedUIElement; } } /// /// Indicates whether at least one group with at least one button is rendered in the menu. /// public bool MenuEmpty { get { return uniMenu.MenuEmpty; } } /// /// Gets or sets the value that indicates whether first item should be highlighted. /// public bool HighlightFirstItem { get { return uniMenu.HighlightFirstItem; } set { uniMenu.HighlightFirstItem = value; } } /// /// Indicates whether to remember item which was last selected and select it again. /// public bool RememberSelectedItem { get { return uniMenu.RememberSelectedItem; } set { uniMenu.RememberSelectedItem = value; } } /// /// Code name of the UI element. /// public string ElementName { get { return mElementName; } set { mElementName = value; } } /// /// Code name of the module. /// public string ModuleName { get { return mModuleName; } set { mModuleName = value; uniMenu.ModuleName = value; } } /// /// Target frameset in which the links are opened. /// public string TargetFrameset { get { return mTargetFrameset; } set { mTargetFrameset = value; uniMenu.TargetFrameset = value; } } /// /// Query parameter name for the preselection of the item. /// public string QueryParameterName { get; set; } /// /// Indicates whether current UI culture is RTL. /// public bool IsRTL { get { return uniMenu.IsRTL; } set { uniMenu.IsRTL = value; } } #endregion #region "Custom events" /// /// Button filtered delegate. /// public delegate bool ButtonFilterEventHandler(object sender, UniMenuArgs eventArgs); /// /// Button created delegate. /// public delegate void ButtonCreatedEventHandler(object sender, UniMenuArgs eventArgs); /// /// Groups created delegate. /// public delegate void GroupsCreatedEventHandler(object sender, List groups); /// /// Button filtered event handler. /// public event ButtonFilterEventHandler OnButtonFiltered; /// /// Button creating event handler. /// public event ButtonCreatedEventHandler OnButtonCreating; /// /// Button created event handler. /// public event ButtonCreatedEventHandler OnButtonCreated; /// /// Groups created event handler. /// public event GroupsCreatedEventHandler OnGroupsCreated; #endregion #region "Methods" protected void Page_Load(object sender, EventArgs e) { if (StopProcessing) { return; } // Handle the pre-selection preselectedItem = QueryHelper.GetString(QueryParameterName, ""); if (preselectedItem.StartsWithCSafe("cms.", true)) { preselectedItem = preselectedItem.Substring(4); } uniMenu.HighlightItem = preselectedItem; // If element name is not set, use root module element string elemName = ElementName; if (String.IsNullOrEmpty(elemName)) { elemName = ModuleName.Replace(".", ""); } // Get the UI elements DataSet ds = UIElementInfoProvider.GetChildUIElements(ModuleName, elemName); if (!DataHelper.DataSourceIsEmpty(ds)) { FilterElements(ds); // Prepare the list of elements foreach (DataRow dr in ds.Tables[0].Rows) { string url = ValidationHelper.GetString(dr["ElementTargetURL"], ""); Group group = new Group(); if (url.EndsWithCSafe("ascx")) { group.ControlPath = url; } else { group.UIElementID = ValidationHelper.GetInteger(dr["ElementID"], 0); } group.CssClass = "ContentMenuGroup"; if (GenerateElementCssClass) { string name = ValidationHelper.GetString(dr["ElementName"], String.Empty).Replace(".", String.Empty); group.CssClass += " ContentMenuGroup" + name; group.SeparatorCssClass = "UniMenuSeparator" + name; } group.Caption = ResHelper.LocalizeString(ValidationHelper.GetString(dr["ElementCaption"], "")); uniMenu.Groups.Add(group); } // Raise groups created event if (OnGroupsCreated != null) { OnGroupsCreated(this, uniMenu.Groups); } // Button created & filtered event handler if (OnButtonCreating != null) { uniMenu.OnButtonCreating += uniMenu_OnButtonCreating; } if (OnButtonCreated != null) { uniMenu.OnButtonCreated += uniMenu_OnButtonCreated; } if (OnButtonFiltered != null) { uniMenu.OnButtonFiltered += uniMenu_OnButtonFiltered; } } // Add editing icon in development mode if (SettingsKeyProvider.DevelopmentMode && CMSContext.CurrentUser.IsGlobalAdministrator && !DisableEditIcon) { ResourceInfo ri = ResourceInfoProvider.GetResourceInfo(ModuleName); if (ri != null) { ltlAfter.Text += String.Format("
{0}
", UIHelper.GetResourceUIElementsLink(Page, ri.ResourceId)); } } } /// /// Filters the dataset with UI Elements according to UI Profile of current user by default and according to custom event (if defined). /// protected void FilterElements(DataSet dsElements) { // For all tables in dataset foreach (DataTable dt in dsElements.Tables) { ArrayList deleteRows = new ArrayList(); // Find rows to filter out foreach (DataRow dr in dt.Rows) { UIElementInfo uiElement = new UIElementInfo(dr); bool allowed = CMSContext.CurrentUser.IsAuthorizedPerUIElement(ModuleName, uiElement.ElementName); if (!allowed) { deleteRows.Add(dr); } } // Delete the filtered rows foreach (DataRow dr in deleteRows) { dt.Rows.Remove(dr); } } } protected void uniMenu_OnButtonCreating(object sender, UniMenuArgs e) { if (OnButtonCreating != null) { OnButtonCreating(sender, e); } } protected void uniMenu_OnButtonCreated(object sender, UniMenuArgs e) { if (OnButtonCreated != null) { OnButtonCreated(sender, e); } } protected bool uniMenu_OnButtonFiltered(object sender, UniMenuArgs e) { if (OnButtonFiltered != null) { return OnButtonFiltered(sender, e); } return false; } #endregion }