using System; using System.Collections; using System.Collections.Generic; using System.Data; using CMS.CMSHelper; using CMS.GlobalHelper; using CMS.IO; using CMS.SettingsProvider; using CMS.SiteProvider; using CMS.UIControls; public partial class CMSAdminControls_UI_UIProfiles_UIGuide : CMSUserControl { #region "Variables" protected string mElementName = null; protected string mModuleName = null; private bool mModuleAvailabilityForSiteRequired = false; private int mColumns = 2; #endregion #region "Properties" /// /// Gets ArrayList of the guide parameters. /// public List> GuideParameters { get { return guideElem.Parameters; } } /// /// 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; } } /// /// Number of displayed columns, by default set to 2. /// public int Columns { get { return mColumns; } set { mColumns = value; } } /// /// Gets the value which indicates whether guide contains some elements. /// public bool GuideEmpty { get { return (guideElem.Parameters.Count == 0); } } /// /// Indicates if site availability of the corresponding module (module with name in format "cms.[ElementName]") is required for each UI element in the menu. Takes effect only when corresponding module exists. /// public bool ModuleAvailabilityForSiteRequired { get { return mModuleAvailabilityForSiteRequired; } set { mModuleAvailabilityForSiteRequired = value; } } #endregion #region "Custom events" /// /// Guide item created delegate. /// public delegate List GuideItemCreatedEventHandler(UIElementInfo uiElement, List defaultItem); /// /// Guide item created event handler. /// public event GuideItemCreatedEventHandler OnGuideItemCreated; #endregion protected void Page_Load(object sender, EventArgs e) { if (!String.IsNullOrEmpty(ModuleName)) { // Reserve UI tabs DataRow sdr = SecurityHelper.ReserveSecurityLogItem("LoadUIGuide"); // Get UI elements which represent the guide items DataSet ds = null; if (String.IsNullOrEmpty(ElementName)) { ds = UIElementInfoProvider.GetUIMenuElements(ModuleName); } else { ds = UIElementInfoProvider.GetChildUIElements(ModuleName, ElementName); } // Create guide item collection CurrentUserInfo currentUser = CMSContext.CurrentUser; int i = 0; if (!DataHelper.DataSourceIsEmpty(ds)) { var guideParams = new List>(4); foreach (DataRow dr in ds.Tables[0].Rows) { string elementName = ValidationHelper.GetString(dr["ElementName"], ""); if (currentUser.IsAuthorizedPerUIElement(ModuleName, elementName, ModuleAvailabilityForSiteRequired)) { // Get parameters of the guide item List itemParams = GetGuideItemParameters(new UIElementInfo(dr)); // If item initialized, add it to the collection if (itemParams != null) { guideParams.Add(itemParams); i++; } } } // Initialize guide guideElem.Parameters = guideParams; guideElem.Columns = Columns; } // Log the security if (sdr != null) { SecurityHelper.SetLogItemData(sdr, currentUser.UserName, ModuleName, ElementName, i, CMSContext.CurrentSiteName); } } } /// /// Creates empty parameters list. /// public void InitEmptyParameters() { // Empty params guideElem.Parameters = new List>(4); // Set column count guideElem.Columns = Columns; } /// /// Returns initialized array list with guide item parameters. /// /// UI element data private List GetGuideItemParameters(UIElementInfo uiElement) { // Ensure item caption string itemCaption = uiElement.ElementCaption; if (string.IsNullOrEmpty(itemCaption)) { itemCaption = uiElement.ElementDisplayName; } itemCaption = ResHelper.LocalizeString(itemCaption); // Ensure item description string itemDescription = ""; if (!String.IsNullOrEmpty(uiElement.ElementDescription)) { itemDescription = ResHelper.LocalizeString(uiElement.ElementDescription); } else { string moduleName = ModuleName; if (moduleName.ToLowerCSafe().StartsWithCSafe("cms.")) { moduleName = moduleName.Remove(0, 4); } itemDescription = GetString(String.Format("{0}.{1}.Description", moduleName, uiElement.ElementName)); } // Ensure item URL string itemUrl = CMSContext.ResolveMacros(uiElement.ElementTargetURL); itemUrl = URLHelper.ResolveUrl(itemUrl); if (String.IsNullOrEmpty(itemUrl)) { return null; } // Ensure item icon path string itemBigIcon = ""; string itemIcon = uiElement.ElementIconPath; if (!string.IsNullOrEmpty(itemIcon)) { if (!ValidationHelper.IsURL(itemIcon)) { int slashIndex = itemIcon.Replace('\\', '/').LastIndexOfCSafe('/'); if ((slashIndex != -1) && (slashIndex < itemIcon.Length)) { // Trim file name of the small icon from the path itemIcon = itemIcon.Remove(slashIndex); // Get file name of the big icon itemBigIcon = UIHelper.GetImagePath(Page, itemIcon + "/module.png", false, false); // Check if exists if (!FileHelper.FileExists(itemBigIcon)) { itemBigIcon = UIHelper.GetImagePath(Page, itemIcon + "/object.png", false, false); if (!File.Exists(Server.MapPath(itemBigIcon))) { // Use default big icon itemBigIcon = ""; } } } } else { itemBigIcon = itemIcon; } } // Use default big icon if (itemBigIcon == "") { itemBigIcon = GetImagePath("CMSModules/module.png"); } var parameters = new List(5); // Initialize guide item parameters.Add(itemBigIcon); parameters.Add(itemCaption); parameters.Add(itemUrl); parameters.Add(itemDescription); parameters.Add(uiElement.ElementName); // Handle additional initialization of the guide item if (OnGuideItemCreated != null) { parameters = OnGuideItemCreated(uiElement, parameters); } return parameters; } }