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
}