public override void OnInit()
    {
        Control.OnNodeCreated += Control_OnNodeCreated;

        // Get NOT custom conversions from UI elements
        UIElementInfo root = UIElementInfoProvider.GetRootUIElementInfo("CMS.WebAnalytics");

        if (root != null)
        {
            // Get all UI elements to filter custom reports
            DataSet data = UIElementInfoProvider.GetUIElements("ElementIDPath LIKE '" + SqlHelper.EscapeLikeQueryPatterns(root.ElementIDPath) + "/%'", String.Empty, 0, "ElementName,ElementTargetUrl");
            if (!DataHelper.DataSourceIsEmpty(data) && (data.Tables.Count > 0))
            {
                // Condition for custom reports
                customWhereCondition = "StatisticsCode NOT IN (";
                foreach (DataRow dr in data.Tables[0].Rows)
                {
                    string codeName = ValidationHelper.GetString(dr["ElementName"], String.Empty);
                    customWhereCondition += "N'" + SqlHelper.GetSafeQueryString(codeName, false) + "',";
                }

                // Add special cases - don't want to show them in UI or Custom report section
                customWhereCondition += additionalConversions.Replace(';', ',');

                customWhereCondition  = customWhereCondition.TrimEnd(new[] { ',' });
                customWhereCondition += ")";

                // Filter AB Testing
                customWhereCondition += " AND (StatisticsCode NOT LIKE 'abconversion;%') AND (StatisticsCode NOT LIKE 'mvtconversion;%') AND (StatisticsCode NOT LIKE 'campconversion;%') " +
                                        "AND (StatisticsCode NOT LIKE 'absessionconversionfirst;%') AND (StatisticsCode NOT LIKE 'absessionconversionrecurring;%') " +
                                        "AND (StatisticsCode NOT LIKE 'abvisitfirst;%')  AND (StatisticsCode NOT LIKE 'abvisitreturn;%') AND (StatisticsCode <> N'campaign') and (StatisticsCode <> N'conversion') ";
            }
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        treeElem.OnNodeCreated += new CMSAdminControls_UI_UIProfiles_UIMenu.NodeCreatedEventHandler(menuElem_OnNodeCreated);

        // Get NOT custom conversions from UI elements
        UIElementInfo root = UIElementInfoProvider.GetRootUIElementInfo("CMS.WebAnalytics");

        if (root != null)
        {
            // Get all UI elements to filter custom reports
            DataSet dsElems = UIElementInfoProvider.GetUIElements("ElementIDPath LIKE '" + DataHelper.EscapeLikeQueryPatterns(root.ElementIDPath, true, true, true) + "/%'", String.Empty, 0, "ElementName,ElementTargetUrl");
            if (!DataHelper.DataSourceIsEmpty(dsElems) && (dsElems.Tables.Count > 0))
            {
                // Condition for custom reports
                customWhereCondition = "StatisticsCode NOT IN (";
                foreach (DataRow dr in dsElems.Tables[0].Rows)
                {
                    string codeName = ValidationHelper.GetString(dr["ElementName"], String.Empty);
                    customWhereCondition += "N'" + SqlHelperClass.GetSafeQueryString(codeName, false) + "',";
                }

                // Add special cases - dont want to show them in UI or Custom report section
                customWhereCondition += additionalConversions.Replace(';', ',');

                customWhereCondition  = customWhereCondition.TrimEnd(new char[] { ',' });
                customWhereCondition += ")";

                // Filter AB Testing
                customWhereCondition += " AND (StatisticsCode NOT LIKE 'abconversion;%') AND (StatisticsCode NOT LIKE 'mvtconversion;%') AND (StatisticsCode NOT LIKE 'campconversion;%') ";
            }
        }
    }
Пример #3
0
    /// <summary>
    /// Gets and bulk updates UI elements. Called when the "Get and bulk update elements" button is pressed.
    /// Expects the CreateUIElement method to be run first.
    /// </summary>
    private bool GetAndBulkUpdateUIElements()
    {
        // Prepare the parameters
        string where = "ElementName LIKE N'MyNewElement%'";

        // Get the data
        DataSet elements = UIElementInfoProvider.GetUIElements(where, null);

        if (!DataHelper.DataSourceIsEmpty(elements))
        {
            // Loop through the individual items
            foreach (DataRow elementDr in elements.Tables[0].Rows)
            {
                // Create object from DataRow
                UIElementInfo modifyElement = new UIElementInfo(elementDr);

                // Update the properties
                modifyElement.ElementDisplayName = modifyElement.ElementDisplayName.ToUpper();

                // Save the changes
                UIElementInfoProvider.SetUIElementInfo(modifyElement);
            }

            return(true);
        }

        return(false);
    }
Пример #4
0
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!StopProcessing && !URLHelper.IsPostback())
        {
            int shift = -1;
            string where = String.Empty;
            if (ModuleID != 0)
            {
                where = "ElementResourceID = " + ModuleID;
            }

            if (!String.IsNullOrEmpty(WhereCondition))
            {
                where = SqlHelper.AddWhereCondition(where, WhereCondition);
            }

            // Get the data
            DataSet ds = UIElementInfoProvider.GetUIElements(where, "ElementOrder", 0, "ElementID, ElementParentID, ElementDisplayName, ElementOrder, ElementLevel");
            if (!DataHelper.DataSourceIsEmpty(ds))
            {
                gds = new GroupedDataSource(ds, "ElementParentID");

                FillDropDownList(shift, 0);
            }
        }
    }
Пример #5
0
    /// <summary>
    /// Recursivelly select or deselect all child elements.
    /// </summary>
    /// <param name="select">Determines the type of action</param>
    /// <param name="parentId">ID of the parent UIElement</param>
    /// <param name="excludeRoot">Indicates whether to exclude root element from selection/deselection</param>
    private void SelectDeselectAll(bool select, int parentId, bool excludeRoot)
    {
        // Check manage permission
        if (!MembershipContext.AuthenticatedUser.IsAuthorizedPerResource("CMS.UIPersonalization", CMSAdminControl.PERMISSION_MODIFY))
        {
            RedirectToAccessDenied("CMS.UIPersonalization", CMSAdminControl.PERMISSION_MODIFY);
        }

        // Get the children and select them
        string where = (ModuleID > 0) ?
                       String.Format(@"(ElementResourceID = {0} OR EXISTS (SELECT ElementID FROM CMS_UIElement AS x WHERE x.ElementIDPath like CMS_UIElement.ElementIDPath+ '%' AND x.ElementResourceID = {0})) AND
                            ElementIDPath LIKE (SELECT TOP 1 ElementIDPath FROM CMS_UIElement WHERE ElementID = {1}) + '%' ", ModuleID, parentId) :
                       "ElementIDPath LIKE (SELECT TOP 1 ElementIDPath FROM CMS_UIElement WHERE ElementID = " + parentId + ") + '%' ";
        if (excludeRoot)
        {
            where += " AND NOT ElementID = " + parentId;
        }
        if (!String.IsNullOrEmpty(GroupPreffix))
        {
            where += " AND ElementName NOT LIKE '" + SqlHelper.EscapeLikeText(SqlHelper.EscapeQuotes(GroupPreffix)) + "%'";
        }

        using (CMSActionContext context = new CMSActionContext())
        {
            // Many updates caused deadlocks with CMS_Role table, disable touch parent of the role
            context.TouchParent = false;

            DataSet ds = UIElementInfoProvider.GetUIElements(where, null, 0, "ElementID");
            if (!DataHelper.DataSourceIsEmpty(ds))
            {
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    int id = ValidationHelper.GetInteger(dr["ElementID"], 0);
                    if (select)
                    {
                        RoleUIElementInfoProvider.AddRoleUIElementInfo(RoleID, id);
                    }
                    else
                    {
                        RoleUIElementInfoProvider.DeleteRoleUIElementInfo(RoleID, id);
                    }
                }
            }

            // Explicitly touch the role only once
            var role = RoleInfoProvider.GetRoleInfo(RoleID);
            if (role != null)
            {
                role.Update();
            }
        }
    }
Пример #6
0
    protected void Page_Load(object sender, EventArgs e)
    {
        this.menuElem.OnNodeCreated += new CMSAdminControls_UI_UIProfiles_UIMenu.NodeCreatedEventHandler(menuElem_OnNodeCreated);

        ScriptHelper.RegisterClientScriptBlock(this.Page, typeof(string), "AdministrationLoadItem", ScriptHelper.GetScript(
                                                   "function LoadItem(elementName, elementUrl) \n" +
                                                   "{ \n" +
                                                   "  parent.frames['analyticsDefault'].location.href = elementUrl; \n" +
                                                   "} \n"));

        this.menuElem.EnableRootSelect = false;

        // If node preselection is happening, expand the navigation tree
        if (!String.IsNullOrEmpty(this.selectedNode))
        {
            this.menuElem.ExpandLevel = 1;
        }
        else
        {
            this.menuElem.ExpandLevel = 0;
        }

        // Get NOT custom conversions from UI elements
        UIElementInfo root = UIElementInfoProvider.GetRootUIElementInfo("CMS.WebAnalytics");

        if (root != null)
        {
            // Get all UI elements to filter custom reports
            DataSet dsElems = UIElementInfoProvider.GetUIElements("ElementIDPath LIKE '" + DataHelper.EscapeLikeQueryPatterns(root.ElementIDPath, true, true, true) + "/%'", String.Empty, 0, "ElementName,ElementTargetUrl");
            if (!SqlHelperClass.DataSourceIsEmpty(dsElems) && (dsElems.Tables.Count > 0))
            {
                // Condition for custom reports
                customWhereCondition = "StatisticsCode NOT IN (";
                foreach (DataRow dr in dsElems.Tables[0].Rows)
                {
                    string codeName = ValidationHelper.GetString(dr["ElementName"], String.Empty);
                    customWhereCondition += "N'" + SqlHelperClass.GetSafeQueryString(codeName, false) + "',";
                }

                // Add special cases - dont want to show them in UI or Custom report section
                customWhereCondition += additionalConversions.Replace(';', ',');

                customWhereCondition  = customWhereCondition.TrimEnd(new char[] { ',' });
                customWhereCondition += ")";

                // Filter AB Testing
                customWhereCondition += " AND (StatisticsCode NOT LIKE 'abconversion;%') AND (StatisticsCode NOT LIKE 'mvtconversion;%') AND (StatisticsCode NOT LIKE 'campconversion;%') ";
            }
        }
    }
    /// <summary>
    /// Recursivelly select or deselect all child elements.
    /// </summary>
    /// <param name="select">Determines the type of action</param>
    /// <param name="parentId">ID of the parent UIElement</param>
    /// <param name="excludeRoot">Indicates whether to exclude root element from selection/deselection</param>
    private void SelectDeselectAll(bool select, int parentId, bool excludeRoot)
    {
        // Check manage permission
        if (!MembershipContext.AuthenticatedUser.IsAuthorizedPerResource("CMS.UIPersonalization", CMSAdminControl.PERMISSION_MODIFY))
        {
            RedirectToAccessDenied("CMS.UIPersonalization", CMSAdminControl.PERMISSION_MODIFY);
        }

        // Get the children and select them (do not use module as filter if all elements should be visible)
        string where = ((ModuleID > 0) && !ShowAllElementsFromModuleSection) ?
                       String.Format(@"(ElementResourceID = {0} OR EXISTS (SELECT ElementID FROM CMS_UIElement AS x WHERE x.ElementIDPath LIKE CMS_UIElement.ElementIDPath+ '%' AND x.ElementResourceID = {0})) AND
                            ElementIDPath LIKE (SELECT TOP 1 ElementIDPath FROM CMS_UIElement WHERE ElementID = {1}) + '%' ", ModuleID, parentId) :
                       "ElementIDPath LIKE (SELECT TOP 1 ElementIDPath FROM CMS_UIElement WHERE ElementID = " + parentId + ") + '%' ";
        if (excludeRoot)
        {
            where += " AND NOT ElementID = " + parentId;
        }
        if (!String.IsNullOrEmpty(GroupPreffix))
        {
            where += " AND ElementName NOT LIKE '" + SqlHelper.EscapeLikeText(SqlHelper.EscapeQuotes(GroupPreffix)) + "%'";
        }

        using (CMSActionContext context = new CMSActionContext())
        {
            // Many updates caused deadlocks with CMS_Role table, disable touch parent of the role
            context.TouchParent = false;

            var elementIds = UIElementInfoProvider.GetUIElements()
                             .Where(where)
                             .Columns("ElementID")
                             .GetListResult <int>();

            foreach (var id in elementIds)
            {
                if (select)
                {
                    RoleUIElementInfoProvider.AddRoleUIElementInfo(RoleID, id);
                }
                else
                {
                    RoleUIElementInfoProvider.DeleteRoleUIElementInfo(RoleID, id);
                }
            }

            // Explicitly touch the role only once
            RoleInfoProvider.GetRoleInfo(RoleID)
            ?.Update();
        }
    }
    /// <summary>
    /// Handles the UniGrid's OnAction event.
    /// </summary>
    /// <param name="actionName">Name of item (button) that threw the event</param>
    /// <param name="actionArgument">ID (value of Primary key) of the corresponding data row</param>
    protected void OnAction(string actionName, object actionArgument)
    {
        if (actionName == "delete")
        {
            int resourceId = ValidationHelper.GetInteger(actionArgument, 0);

            // Check if module has any classes (including page types...)
            var classes  = DataClassInfoProvider.GetClasses().Where("ClassResourceID", QueryOperator.Equals, resourceId);
            var settings = SettingsCategoryInfoProvider.GetSettingsCategories().Where("CategoryResourceID", QueryOperator.Equals, resourceId);
            var elements = UIElementInfoProvider.GetUIElements().Where("ElementResourceID", QueryOperator.Equals, resourceId);

            if (!classes.HasResults() && !settings.HasResults() && !elements.HasResults())
            {
                ResourceInfoProvider.DeleteResourceInfo(resourceId);
            }
            else
            {
                Control.ShowError(Control.GetString("cms_resource.deleteerror"));
            }
        }
    }
    /// <summary>
    /// Recursivelly select or deselect all child elements.
    /// </summary>
    /// <param name="select">Determines the type of action</param>
    /// <param name="parentId">ID of the parent UIElement</param>
    /// <param name="excludeRoot">Indicates whether to exclude root element from selection/deselection</param>
    private void SelectDeselectAll(bool select, int parentId, bool excludeRoot)
    {
        // Check manage permission
        if (!CMSContext.CurrentUser.IsAuthorizedPerResource("CMS.UIPersonalization", CMSAdminControl.PERMISSION_MODIFY))
        {
            RedirectToAccessDenied("CMS.UIPersonalization", CMSAdminControl.PERMISSION_MODIFY);
        }

        // Get the children and select them
        string where = "ElementIDPath LIKE (SELECT TOP 1 ElementIDPath FROM CMS_UIElement WHERE ElementID = " + parentId + ") + '%' ";
        if (excludeRoot)
        {
            where += " AND NOT ElementID = " + parentId;
        }
        if (!String.IsNullOrEmpty(this.GroupPreffix))
        {
            where += " AND ElementName NOT LIKE '" + SqlHelperClass.GetSafeQueryString(this.GroupPreffix, false) + "%'";
        }
        DataSet ds = UIElementInfoProvider.GetUIElements(where, null, 0, "ElementID");

        if (!DataHelper.DataSourceIsEmpty(ds))
        {
            foreach (DataRow dr in ds.Tables[0].Rows)
            {
                int id = ValidationHelper.GetInteger(dr["ElementID"], 0);
                if (select)
                {
                    RoleUIElementInfoProvider.AddRoleUIElementInfo(this.RoleID, id);
                }
                else
                {
                    RoleUIElementInfoProvider.DeleteRoleUIElementInfo(this.RoleID, id);
                }
            }
        }
    }
Пример #10
0
    /// <summary>
    /// Generates panel with buttons loaded from given UI Element.
    /// </summary>
    /// <param name="uiElementId">ID of the UI Element</param>
    protected Panel GetButtons(int uiElementId)
    {
        const int bigButtonMinimalWidth   = 40;
        const int smallButtonMinimalWidth = 66;

        Panel pnlButtons = null;

        // Load the buttons manually from UI Element
        DataSet ds = UIElementInfoProvider.GetChildUIElements(uiElementId);

        // When no child found
        if (DataHelper.DataSourceIsEmpty(ds))
        {
            // Try to use group element as button
            ds = UIElementInfoProvider.GetUIElements("ElementID = " + uiElementId, null);

            if (!DataHelper.DataSourceIsEmpty(ds))
            {
                DataRow dr  = ds.Tables[0].Rows[0];
                string  url = ValidationHelper.GetString(dr["ElementTargetURL"], "");

                // Use group element as button only if it has URL specified
                if (string.IsNullOrEmpty(url))
                {
                    ds = null;
                }
            }
        }

        if (!DataHelper.DataSourceIsEmpty(ds))
        {
            // Filter the dataset according to UI Profile
            FilterElements(ds);

            int small = 0;
            int count = ds.Tables[0].Rows.Count;

            // No buttons, render nothing
            if (count == 0)
            {
                return(null);
            }

            // Prepare the panel
            pnlButtons          = new Panel();
            pnlButtons.CssClass = "ActionButtons";

            // Prepare the table
            Table    tabGroup    = new Table();
            TableRow tabGroupRow = new TableRow();

            tabGroup.CellPadding        = 0;
            tabGroup.CellSpacing        = 0;
            tabGroup.EnableViewState    = false;
            tabGroupRow.EnableViewState = false;
            tabGroup.Rows.Add(tabGroupRow);

            List <Panel> panels = new List <Panel>();

            for (int i = 0; i < count; i++)
            {
                // Get current and next button
                UIElementInfo uiElement     = new UIElementInfo(ds.Tables[0].Rows[i]);
                UIElementInfo uiElementNext = null;
                if (i < count - 1)
                {
                    uiElementNext = new UIElementInfo(ds.Tables[0].Rows[i + 1]);
                }

                // Set the first button
                if (mFirstUIElement == null)
                {
                    mFirstUIElement = uiElement;
                }

                // Get the sizes of current and next button. Button is large when it is the only in the group
                bool isSmall     = (uiElement.ElementSize == UIElementSizeEnum.Regular) && (count > 1);
                bool isResized   = (uiElement.ElementSize == UIElementSizeEnum.Regular) && (!isSmall);
                bool isNextSmall = (uiElementNext != null) && (uiElementNext.ElementSize == UIElementSizeEnum.Regular);

                // Set the CSS class according to the button size
                string cssClass    = (isSmall ? "SmallButton" : "BigButton");
                string elementName = uiElement.ElementName;

                // Create main button panel
                CMSPanel pnlButton = new CMSPanel()
                {
                    ID      = "pnlButton" + elementName,
                    ShortID = "b" + elementName
                };

                pnlButton.Attributes.Add("name", elementName);
                pnlButton.CssClass = cssClass;

                // Remember the first button
                if (firstPanel == null)
                {
                    firstPanel = pnlButton;
                }

                // Remember the selected button
                if ((preselectedPanel == null) && elementName.Equals(HighlightItem, StringComparison.InvariantCultureIgnoreCase))
                {
                    preselectedPanel = pnlButton;

                    // Set the selected button
                    if (mHighlightedUIElement == null)
                    {
                        mHighlightedUIElement = uiElement;
                    }
                }

                // URL or behavior
                string url = uiElement.ElementTargetURL;

                if (!string.IsNullOrEmpty(url) && url.StartsWith("javascript:", StringComparison.InvariantCultureIgnoreCase))
                {
                    pnlButton.Attributes["onclick"] = url.Substring("javascript:".Length);
                }
                else if (!string.IsNullOrEmpty(url) && !url.StartsWith("javascript:", StringComparison.InvariantCultureIgnoreCase))
                {
                    string buttonSelection = (RememberSelectedItem ? "SelectButton(this);" : "");

                    // Ensure hash code if required
                    string targetUrl = CMSContext.ResolveMacros(URLHelper.EnsureHashToQueryParameters(url));

                    if (!String.IsNullOrEmpty(TargetFrameset))
                    {
                        pnlButton.Attributes["onclick"] = String.Format("{0}parent.frames['{1}'].location.href = '{2}';", buttonSelection, TargetFrameset, URLHelper.ResolveUrl(targetUrl));
                    }
                    else
                    {
                        pnlButton.Attributes["onclick"] = String.Format("{0}self.location.href = '{1}';", buttonSelection, URLHelper.ResolveUrl(targetUrl));
                    }

                    if (OnButtonCreated != null)
                    {
                        OnButtonCreated(uiElement, targetUrl);
                    }
                }

                // Tooltip
                if (!string.IsNullOrEmpty(uiElement.ElementDescription))
                {
                    pnlButton.ToolTip = ResHelper.LocalizeString(uiElement.ElementDescription);
                }
                else
                {
                    pnlButton.ToolTip = ResHelper.LocalizeString(uiElement.ElementCaption);
                }
                pnlButton.EnableViewState = false;

                // Ensure correct grouping of small buttons
                if (isSmall && (small == 0))
                {
                    small++;

                    Panel pnlSmallGroup = new Panel()
                    {
                        ID = "pnlGroupSmall" + uiElement.ElementName
                    };
                    if (IsRTL)
                    {
                        pnlSmallGroup.Style.Add("float", "right");
                        pnlSmallGroup.Style.Add("text-align", "right");
                    }
                    else
                    {
                        pnlSmallGroup.Style.Add("float", "left");
                        pnlSmallGroup.Style.Add("text-align", "left");
                    }

                    pnlSmallGroup.EnableViewState = false;
                    pnlSmallGroup.Controls.Add(pnlButton);
                    panels.Add(pnlSmallGroup);
                }

                // Generate button image
                Image buttonImage = new Image()
                {
                    ID         = "imgButton" + uiElement.ElementName,
                    ImageAlign = (isSmall ? ImageAlign.AbsMiddle : ImageAlign.Top)
                };
                if (!string.IsNullOrEmpty(uiElement.ElementIconPath))
                {
                    string iconPath = GetImageUrl(uiElement.ElementIconPath);

                    // Check if element size was changed
                    if (isResized)
                    {
                        // Try to get larger icon
                        string largeIconPath = iconPath.Replace("list.png", "module.png");
                        try
                        {
                            if (CMS.IO.File.Exists(MapPath(largeIconPath)))
                            {
                                iconPath = largeIconPath;
                            }
                        }
                        catch { }
                    }

                    buttonImage.ImageUrl = iconPath;
                }
                else
                {
                    // Load defaul module icon if ElementIconPath is not specified
                    buttonImage.ImageUrl = GetImageUrl("CMSModules/module.png");
                }
                buttonImage.EnableViewState = false;

                // Generate button text
                Literal captionLiteral = new Literal()
                {
                    ID              = "ltlCaption" + uiElement.ElementName,
                    Text            = (isSmall ? "\n" : "<br />") + ResHelper.LocalizeString(uiElement.ElementCaption),
                    EnableViewState = false
                };

                // Generate button link
                HyperLink buttonLink = new HyperLink()
                {
                    ID = "lnkButton" + uiElement.ElementName
                };
                buttonLink.Controls.Add(buttonImage);
                buttonLink.Controls.Add(captionLiteral);
                buttonLink.EnableViewState = false;

                //Generate button table (IE7 issue)
                Table     tabButton     = new Table();
                TableRow  tabRow        = new TableRow();
                TableCell tabCellLeft   = new TableCell();
                TableCell tabCellMiddle = new TableCell();
                TableCell tabCellRight  = new TableCell();

                tabButton.CellPadding = 0;
                tabButton.CellSpacing = 0;

                tabButton.EnableViewState     = false;
                tabRow.EnableViewState        = false;
                tabCellLeft.EnableViewState   = false;
                tabCellMiddle.EnableViewState = false;
                tabCellRight.EnableViewState  = false;

                tabButton.Rows.Add(tabRow);
                tabRow.Cells.Add(tabCellLeft);
                tabRow.Cells.Add(tabCellMiddle);
                tabRow.Cells.Add(tabCellRight);

                // Generate left border
                Panel pnlLeft = new Panel()
                {
                    ID              = "pnlLeft" + uiElement.ElementName,
                    CssClass        = "Left" + cssClass,
                    EnableViewState = false
                };

                // Generate middle part of button
                Panel pnlMiddle = new Panel()
                {
                    ID       = "pnlMiddle" + uiElement.ElementName,
                    CssClass = "Middle" + cssClass
                };
                pnlMiddle.Controls.Add(buttonLink);
                Panel pnlMiddleTmp = new Panel()
                {
                    EnableViewState = false
                };
                if (isSmall)
                {
                    pnlMiddle.Style.Add("min-width", smallButtonMinimalWidth + "px");
                    // IE7 issue with min-width
                    pnlMiddleTmp.Style.Add("width", smallButtonMinimalWidth + "px");
                    pnlMiddle.Controls.Add(pnlMiddleTmp);
                }
                else
                {
                    pnlMiddle.Style.Add("min-width", bigButtonMinimalWidth + "px");
                    // IE7 issue with min-width
                    pnlMiddleTmp.Style.Add("width", bigButtonMinimalWidth + "px");
                    pnlMiddle.Controls.Add(pnlMiddleTmp);
                }
                pnlMiddle.EnableViewState = false;

                // Generate right border
                Panel pnlRight = new Panel()
                {
                    ID              = "pnlRight" + uiElement.ElementName,
                    CssClass        = "Right" + cssClass,
                    EnableViewState = false
                };

                // Add inner controls
                tabCellLeft.Controls.Add(pnlLeft);
                tabCellMiddle.Controls.Add(pnlMiddle);
                tabCellRight.Controls.Add(pnlRight);

                pnlButton.Controls.Add(tabButton);

                // If there were two small buttons in a row end the grouping div
                if ((small == 2) || (isSmall && !isNextSmall))
                {
                    small = 0;

                    // Add the button to the small buttons grouping panel
                    panels[panels.Count - 1].Controls.Add(pnlButton);
                }
                else
                {
                    if (small == 0)
                    {
                        // Add the generated button into collection
                        panels.Add(pnlButton);
                    }
                }
                if (small == 1)
                {
                    small++;
                }
            }

            // Add all panels to control
            foreach (Panel panel in panels)
            {
                TableCell tabGroupCell = new TableCell()
                {
                    VerticalAlign   = VerticalAlign.Top,
                    EnableViewState = false
                };

                tabGroupCell.Controls.Add(panel);
                tabGroupRow.Cells.Add(tabGroupCell);
            }

            pnlButtons.Controls.Add(tabGroup);
        }

        return(pnlButtons);
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        SetupActionButtons();

        // Select element and expand modules first level elements
        if (!RequestHelper.IsPostBack())
        {
            // Select given element
            if (ElementInfo != null)
            {
                SelectNode(ElementInfo);
                ContentTree.SelectPath = ElementInfo.ElementIDPath;
            }

            // Expand all module elements
            var allModuleElements = UIElementInfoProvider.GetUIElements().Where("ElementResourceID", QueryOperator.Equals, ModuleId).Columns("ElementID");

            var elementsToExpand = UIElementInfoProvider.GetUIElements()
                                   .Where("ElementResourceID", QueryOperator.Equals, ModuleId)
                                   .Where(new WhereCondition().WhereNull("ElementParentID").Or().WhereNotIn("ElementParentID", allModuleElements));

            foreach (var uiElementInfo in elementsToExpand)
            {
                if (!String.IsNullOrEmpty(uiElementInfo.ElementIDPath))
                {
                    ContentTree.ExpandPath += uiElementInfo.ElementIDPath + ";";

                    // No element is selected, select first
                    if (ElementInfo == null)
                    {
                        SelectNode(uiElementInfo);
                        ContentTree.SelectPath = uiElementInfo.ElementIDPath;
                    }
                }
            }
        }

        // Create and set UIElements provider
        var tree = new UniTreeProvider();

        tree.ObjectType        = "CMS.UIElement";
        tree.DisplayNameColumn = "ElementDisplayName";
        tree.IDColumn          = "ElementID";
        tree.LevelColumn       = "ElementLevel";
        tree.OrderColumn       = "ElementOrder";
        tree.ParentIDColumn    = "ElementParentID";
        tree.PathColumn        = "ElementIDPath";
        tree.ValueColumn       = "ElementID";
        tree.ChildCountColumn  = "ElementChildCount";
        tree.Columns           = "ElementID,ElementLevel,ElementOrder,ElementParentID,ElementIDPath,ElementChildCount,ElementDisplayName,ElementResourceID,ElementName,ElementIconPath,ElementIconClass";

        ContentTree.UsePostBack    = false;
        ContentTree.ProviderObject = tree;
        ContentTree.OnNodeCreated += uniTree_OnNodeCreated;

        ContentTree.NodeTemplate         = "<span id=\"node_##NODEID##\" onclick=\"SelectNode(##NODEID##,##PARENTNODEID##," + ModuleId + ", true); return false;\" name=\"treeNode\" class=\"ContentTreeItem\">##ICON##<span class=\"Name\">##NODENAME##</span></span>";
        ContentTree.SelectedNodeTemplate = "<span id=\"node_##NODEID##\" onclick=\"SelectNode(##NODEID##,##PARENTNODEID##," + ModuleId + ", true); return false;\" name=\"treeNode\" class=\"ContentTreeItem ContentTreeSelectedItem\">##ICON##<span class=\"Name\">##NODENAME##</span></span>";

        // Icons
        tree.ImageColumn = "ElementIconPath";
    }
    /// <summary>
    /// Reloads the tree data.
    /// </summary>
    public void ReloadData()
    {
        var elementProvider = new UniTreeProvider
        {
            QueryName         = "cms.uielement.selecttree",
            DisplayNameColumn = "ElementDisplayName",
            IDColumn          = "ElementID",
            LevelColumn       = "ElementLevel",
            OrderColumn       = "ElementOrder",
            ParentIDColumn    = "ElementParentID",
            PathColumn        = "ElementIDPath",
            ValueColumn       = "ElementID",
            ChildCountColumn  = "ElementChildCount",
            ImageColumn       = "ElementIconPath",
            Parameters        = new QueryDataParameters {
                { "@RoleID", RoleID }
            },
            IconClassColumn = "ElementIconClass"
        };

        treeElem.ExpandTooltip    = GetString("general.expand");
        treeElem.CollapseTooltip  = GetString("general.collapse");
        treeElem.UsePostBack      = false;
        treeElem.EnableRootAction = false;
        treeElem.ProviderObject   = elementProvider;
        if (SingleModule)
        {
            ResourceInfo ri = ResourceInfoProvider.GetResourceInfo(ModuleID);
            if (ri != null)
            {
                root = UIElementInfoProvider.GetModuleTopUIElement(ModuleID);
                if (root != null)
                {
                    treeElem.ExpandPath = root.ElementIDPath;
                    string links = null;
                    if (Enabled)
                    {
                        links = string.Format(SELECT_DESELECT_LINKS, root.ElementID, "false", CallbackRef, GetString("uiprofile.selectall"), GetString("uiprofile.deselectall"));
                    }
                    string rootText = HTMLHelper.HTMLEncode(ri.ResourceDisplayName) + links;
                    treeElem.SetRoot(rootText, root.ElementID.ToString(), ResolveUrl(root.ElementIconPath));
                    elementProvider.RootLevelOffset = root.ElementLevel;
                }

                if (!ShowAllElementsFromModuleSection)
                {
                    elementProvider.WhereCondition = "ElementResourceID = " + ModuleID;
                }
            }
        }
        else
        {
            if (ModuleID > 0)
            {
                var where = $@"ElementResourceID = {ModuleID} AND (ElementParentID IS NULL OR ElementParentID NOT IN (SELECT ElementID FROM CMS_UIElement WHERE ElementResourceID={ModuleID})) 
    AND (NOT EXISTS (SELECT  ElementIDPath FROM CMS_UIElement AS u WHERE CMS_UIElement.ElementIDPath LIKE u.ElementIDPath + '%' AND ElementResourceID = {ModuleID}
    AND u.ElementIDPath != CMS_UIElement.ElementIDPath))";

                var idPaths = UIElementInfoProvider.GetUIElements()
                              .Where(where)
                              .WhereNotEmpty("ElementIDPath")
                              .Columns("ElementIDPath")
                              .OrderByAscending("ElementLevel")
                              .GetListResult <string>();

                var expandedPath = String.Empty;

                if (idPaths.Any())
                {
                    expandedPath = String.Join(";", idPaths) + ";";
                }

                treeElem.ExpandPath = expandedPath;
            }
        }

        treeElem.ReloadData();
    }
Пример #13
0
    /// <summary>
    /// Reloads the tree data.
    /// </summary>
    public void ReloadData()
    {
        // Prepare the parameters
        QueryDataParameters parameters = new QueryDataParameters();

        parameters.Add("@RoleID", RoleID);

        // Create and set UIElements provider
        UniTreeProvider elementProvider = new UniTreeProvider();

        elementProvider.QueryName         = "cms.uielement.selecttree";
        elementProvider.DisplayNameColumn = "ElementDisplayName";
        elementProvider.IDColumn          = "ElementID";
        elementProvider.LevelColumn       = "ElementLevel";
        elementProvider.OrderColumn       = "ElementOrder";
        elementProvider.ParentIDColumn    = "ElementParentID";
        elementProvider.PathColumn        = "ElementIDPath";
        elementProvider.ValueColumn       = "ElementID";
        elementProvider.ChildCountColumn  = "ElementChildCount";
        elementProvider.ImageColumn       = "ElementIconPath";
        elementProvider.Parameters        = parameters;
        elementProvider.IconClassColumn   = "ElementIconClass";

        treeElem.ExpandTooltip    = GetString("general.expand");
        treeElem.CollapseTooltip  = GetString("general.collapse");
        treeElem.UsePostBack      = false;
        treeElem.EnableRootAction = false;
        treeElem.ProviderObject   = elementProvider;
        if (SingleModule)
        {
            ResourceInfo ri = ResourceInfoProvider.GetResourceInfo(ModuleID);
            if (ri != null)
            {
                root = UIElementInfoProvider.GetModuleTopUIElement(ModuleID);
                if (root != null)
                {
                    treeElem.ExpandPath = root.ElementIDPath;
                    string links = null;
                    if (Enabled)
                    {
                        links = string.Format(SELECT_DESELECT_LINKS, root.ElementID, "false", CallbackRef, GetString("uiprofile.selectall"), GetString("uiprofile.deselectall"));
                    }
                    string rootText = HTMLHelper.HTMLEncode(ri.ResourceDisplayName) + links;
                    treeElem.SetRoot(rootText, root.ElementID.ToString(), ResolveUrl(root.ElementIconPath));
                    elementProvider.RootLevelOffset = root.ElementLevel;
                }

                elementProvider.WhereCondition = "ElementResourceID=" + ModuleID;
            }
        }
        else
        {
            if (ModuleID > 0)
            {
                String where = String.Format(@"ElementResourceID = {0} AND (ElementParentID IS NULL OR ElementParentID NOT IN (SELECT ElementID FROM CMS_UIElement WHERE ElementResourceID={0})) 
                                                AND (NOT EXISTS (SELECT  ElementIDPath FROM CMS_UIElement AS u WHERE CMS_UIElement.ElementIDPath LIKE u.ElementIDPath + '%' AND ElementResourceID = {0}
                                                AND u.ElementIDPath != CMS_UIElement.ElementIDPath))", ModuleID);
                DataSet ds           = UIElementInfoProvider.GetUIElements(where, "ElementLevel ASC");
                String  expandedPath = String.Empty;
                if (!DataHelper.DataSourceIsEmpty(ds))
                {
                    foreach (DataRow dr in ds.Tables[0].Rows)
                    {
                        String path = ValidationHelper.GetString(dr["ElementIDPath"], String.Empty);
                        if (path != String.Empty)
                        {
                            expandedPath += path + ";";
                        }
                    }
                }

                treeElem.ExpandPath = expandedPath;
            }
        }

        treeElem.ReloadData();
    }
Пример #14
0
    /// <summary>
    /// Generates panel with buttons loaded from given UI Element.
    /// </summary>
    /// <param name="uiElementId">ID of the UI Element</param>
    private Panel GetButtons(int uiElementId)
    {
        const int bigButtonMinimalWidth   = 40;
        const int smallButtonMinimalWidth = 66;

        // Load the buttons manually from UI Element
        IEnumerable <UIElementInfo> elements = UIElementInfoProvider.GetChildUIElements(uiElementId);

        // When no child found
        if (!elements.Any())
        {
            // Try to use group element as button
            elements = UIElementInfoProvider.GetUIElements()
                       .WhereEquals("ElementID", uiElementId);

            var groupElement = elements.FirstOrDefault();
            if (groupElement != null)
            {
                // Use group element as button only if it has URL specified
                if (String.IsNullOrEmpty(groupElement.ElementTargetURL))
                {
                    elements = Enumerable.Empty <UIElementInfo>();
                }
            }
        }

        // Filter the dataset according to UI Profile
        var filteredElements = FilterElements(elements).ToList();

        int small = 0;
        int count = filteredElements.Count;

        // No buttons, render nothing
        if (count == 0)
        {
            return(null);
        }

        // Prepare the panel
        var pnlButtons = new Panel();

        pnlButtons.CssClass = "ActionButtons";

        // Prepare the table
        Table    tabGroup    = new Table();
        TableRow tabGroupRow = new TableRow();

        tabGroup.CellPadding        = 0;
        tabGroup.CellSpacing        = 0;
        tabGroup.EnableViewState    = false;
        tabGroupRow.EnableViewState = false;
        tabGroup.Rows.Add(tabGroupRow);

        List <Panel> panels = new List <Panel>();

        for (int i = 0; i < count; i++)
        {
            // Get current and next button
            UIElementInfo uiElement = filteredElements[i];

            UIElementInfo sel = UIContextHelper.CheckSelectedElement(uiElement, UIContext);
            if (sel != null)
            {
                String selectionSuffix = ValidationHelper.GetString(UIContext["selectionSuffix"], String.Empty);
                StartingPage  = UIContextHelper.GetElementUrl(sel, UIContext) + selectionSuffix;
                HighlightItem = uiElement.ElementName;
            }

            // Raise button creating event
            OnButtonCreating?.Invoke(this, new UniMenuArgs {
                UIElement = uiElement
            });

            UIElementInfo uiElementNext = null;
            if (i < count - 1)
            {
                uiElementNext = filteredElements[i + 1];
            }

            // Set the first button
            if (mFirstUIElement == null)
            {
                mFirstUIElement = uiElement;
            }

            // Get the sizes of current and next button. Button is large when it is the only in the group
            bool isSmall     = (uiElement.ElementSize == UIElementSizeEnum.Regular) && (count > 1);
            bool isResized   = (uiElement.ElementSize == UIElementSizeEnum.Regular) && (!isSmall);
            bool isNextSmall = (uiElementNext != null) && (uiElementNext.ElementSize == UIElementSizeEnum.Regular);

            // Set the CSS class according to the button size
            string cssClass    = (isSmall ? "SmallButton" : "BigButton");
            string elementName = uiElement.ElementName;

            // Display only caption - do not substitute with Display name when empty
            string elementCaption = ResHelper.LocalizeString(uiElement.ElementCaption, ResourceCulture);

            // Create main button panel
            CMSPanel pnlButton = new CMSPanel
            {
                ID      = "pnlButton" + elementName,
                ShortID = "b" + elementName
            };

            pnlButton.Attributes.Add("name", elementName);
            pnlButton.CssClass = cssClass;

            // Remember the first button
            if (firstPanel == null)
            {
                firstPanel = pnlButton;
            }

            // Remember the selected button
            if ((preselectedPanel == null) && elementName.EqualsCSafe(HighlightItem, true))
            {
                preselectedPanel = pnlButton;

                // Set the selected button
                if (mHighlightedUIElement == null)
                {
                    mHighlightedUIElement = uiElement;
                }
            }

            // URL or behavior
            string url = uiElement.ElementTargetURL;

            if (!string.IsNullOrEmpty(url) && url.StartsWithCSafe("javascript:", true))
            {
                pnlButton.Attributes["onclick"] = url.Substring("javascript:".Length);
            }
            else
            {
                url = UIContextHelper.GetElementUrl(uiElement, UIContext);

                if (url != String.Empty)
                {
                    string buttonSelection = (RememberSelectedItem ? "SelectButton(this);" : "");

                    // Ensure hash code if required
                    url = MacroResolver.Resolve(URLHelper.EnsureHashToQueryParameters(url));

                    if (!String.IsNullOrEmpty(TargetFrameset))
                    {
                        if (uiElement.ElementType == UIElementTypeEnum.PageTemplate)
                        {
                            url = URLHelper.UpdateParameterInUrl(url, "displaytitle", "false");
                        }

                        String target = UseIFrame ? String.Format("frames['{0}']", TargetFrameset) : String.Format("parent.frames['{0}']", TargetFrameset);
                        pnlButton.Attributes["onclick"] = String.Format("{0}{1}.location.href = '{2}';", buttonSelection, target, UrlResolver.ResolveUrl(url));
                    }
                    else
                    {
                        pnlButton.Attributes["onclick"] = String.Format("{0}self.location.href = '{1}';", buttonSelection, UrlResolver.ResolveUrl(url));
                    }
                }
            }

            // Tooltip
            if (!String.IsNullOrEmpty(uiElement.ElementDescription))
            {
                pnlButton.ToolTip = ResHelper.LocalizeString(uiElement.ElementDescription, ResourceCulture);
            }
            else
            {
                pnlButton.ToolTip = elementCaption;
            }
            pnlButton.EnableViewState = false;

            // Ensure correct grouping of small buttons
            if (isSmall && (small == 0))
            {
                small++;

                Panel pnlSmallGroup = new Panel
                {
                    ID = "pnlGroupSmall" + uiElement.ElementName
                };
                if (IsRTL)
                {
                    pnlSmallGroup.Style.Add("float", "right");
                    pnlSmallGroup.Style.Add("text-align", "right");
                }
                else
                {
                    pnlSmallGroup.Style.Add("float", "left");
                    pnlSmallGroup.Style.Add("text-align", "left");
                }

                pnlSmallGroup.EnableViewState = false;
                pnlSmallGroup.Controls.Add(pnlButton);
                panels.Add(pnlSmallGroup);
            }

            // Generate button link
            HyperLink buttonLink = new HyperLink
            {
                ID = "lnkButton" + uiElement.ElementName,
                EnableViewState = false
            };

            // Generate button image
            Image buttonImage = new Image
            {
                ID              = "imgButton" + uiElement.ElementName,
                ImageAlign      = (isSmall ? ImageAlign.AbsMiddle : ImageAlign.Top),
                AlternateText   = elementCaption,
                EnableViewState = false
            };

            // Use icon path
            if (!string.IsNullOrEmpty(uiElement.ElementIconPath))
            {
                string iconPath = GetImagePath(uiElement.ElementIconPath);

                // Check if element size was changed
                if (isResized)
                {
                    // Try to get larger icon
                    string largeIconPath = iconPath.Replace("list.png", "module.png");
                    if (FileHelper.FileExists(largeIconPath))
                    {
                        iconPath = largeIconPath;
                    }
                }

                buttonImage.ImageUrl = GetImageUrl(iconPath);
                buttonLink.Controls.Add(buttonImage);
            }
            // Use Icon class
            else if (!string.IsNullOrEmpty(uiElement.ElementIconClass))
            {
                var icon = new CMSIcon
                {
                    ID = string.Format("ico_{0}_{1}", identifier, i),
                    EnableViewState = false,
                    ToolTip         = pnlButton.ToolTip,
                    CssClass        = "cms-icon-80 " + uiElement.ElementIconClass
                };
                buttonLink.Controls.Add(icon);
            }
            // Load default module icon if ElementIconPath is not specified
            else
            {
                buttonImage.ImageUrl = GetImageUrl("CMSModules/module.png");
                buttonLink.Controls.Add(buttonImage);
            }

            // Generate caption text
            Literal captionLiteral = new Literal
            {
                ID              = "ltlCaption" + uiElement.ElementName,
                Text            = (isSmall ? "\n" : "<br />") + elementCaption,
                EnableViewState = false
            };
            buttonLink.Controls.Add(captionLiteral);

            //Generate button table (IE7 issue)
            Table     tabButton     = new Table();
            TableRow  tabRow        = new TableRow();
            TableCell tabCellLeft   = new TableCell();
            TableCell tabCellMiddle = new TableCell();
            TableCell tabCellRight  = new TableCell();

            tabButton.CellPadding = 0;
            tabButton.CellSpacing = 0;

            tabButton.EnableViewState     = false;
            tabRow.EnableViewState        = false;
            tabCellLeft.EnableViewState   = false;
            tabCellMiddle.EnableViewState = false;
            tabCellRight.EnableViewState  = false;

            tabButton.Rows.Add(tabRow);
            tabRow.Cells.Add(tabCellLeft);
            tabRow.Cells.Add(tabCellMiddle);
            tabRow.Cells.Add(tabCellRight);

            // Generate left border
            Panel pnlLeft = new Panel
            {
                ID              = "pnlLeft" + uiElement.ElementName,
                CssClass        = "Left" + cssClass,
                EnableViewState = false
            };

            // Generate middle part of button
            Panel pnlMiddle = new Panel
            {
                ID       = "pnlMiddle" + uiElement.ElementName,
                CssClass = "Middle" + cssClass
            };
            pnlMiddle.Controls.Add(buttonLink);
            Panel pnlMiddleTmp = new Panel
            {
                EnableViewState = false
            };
            if (isSmall)
            {
                pnlMiddle.Style.Add("min-width", smallButtonMinimalWidth + "px");
                // IE7 issue with min-width
                pnlMiddleTmp.Style.Add("width", smallButtonMinimalWidth + "px");
                pnlMiddle.Controls.Add(pnlMiddleTmp);
            }
            else
            {
                pnlMiddle.Style.Add("min-width", bigButtonMinimalWidth + "px");
                // IE7 issue with min-width
                pnlMiddleTmp.Style.Add("width", bigButtonMinimalWidth + "px");
                pnlMiddle.Controls.Add(pnlMiddleTmp);
            }
            pnlMiddle.EnableViewState = false;

            // Generate right border
            Panel pnlRight = new Panel
            {
                ID              = "pnlRight" + uiElement.ElementName,
                CssClass        = "Right" + cssClass,
                EnableViewState = false
            };

            // Add inner controls
            tabCellLeft.Controls.Add(pnlLeft);
            tabCellMiddle.Controls.Add(pnlMiddle);
            tabCellRight.Controls.Add(pnlRight);

            pnlButton.Controls.Add(tabButton);

            // If there were two small buttons in a row end the grouping div
            if ((small == 2) || (isSmall && !isNextSmall))
            {
                small = 0;

                // Add the button to the small buttons grouping panel
                panels[panels.Count - 1].Controls.Add(pnlButton);
            }
            else
            {
                if (small == 0)
                {
                    // Add the generated button into collection
                    panels.Add(pnlButton);
                }
            }
            if (small == 1)
            {
                small++;
            }

            // Raise button created event
            OnButtonCreated?.Invoke(this, new UniMenuArgs {
                UIElement = uiElement, TargetUrl = url, ButtonControl = pnlButton, ImageControl = buttonImage
            });
        }

        // Add all panels to control
        foreach (Panel panel in panels)
        {
            TableCell tabGroupCell = new TableCell
            {
                VerticalAlign   = VerticalAlign.Top,
                EnableViewState = false
            };

            tabGroupCell.Controls.Add(panel);
            tabGroupRow.Cells.Add(tabGroupCell);
        }

        pnlButtons.Controls.Add(tabGroup);

        return(pnlButtons);
    }