Exemple #1
0
    private TreeNode CreateTreeNode(CMS.DocumentEngine.TreeNode Node)
    {
        string tooltip    = null;
        string customName = null;

        if ((!string.IsNullOrWhiteSpace(ToolTipFormat) || !string.IsNullOrWhiteSpace(DisplayNameFormat)) && AllowedPageTypes.ToLower().Split(";,|".ToCharArray()).Contains(Node.NodeClassName.ToLower()))
        {
            MacroResolver NodeResolver = GetNodeMacroResolver(Node);
            if (!string.IsNullOrWhiteSpace(ToolTipFormat))
            {
                tooltip = NodeResolver.ResolveMacros(ToolTipFormat);
            }
            if (!string.IsNullOrWhiteSpace(DisplayNameFormat))
            {
                customName = NodeResolver.ResolveMacros(DisplayNameFormat);
            }
        }

        RelatedPage_Tree_CustomTreeNode newNode = new RelatedPage_Tree_CustomTreeNode((!string.IsNullOrWhiteSpace(customName) ? customName : Node.NodeName), Node.NodeID.ToString(), tooltip);

        if (AlreadySelectedNodes.Contains(Node.NodeID) || (FilterSelectableNodes && !SelectableSelectedNodes.Contains(Node.NodeID)))
        {
            newNode.SelectAction       = TreeNodeSelectAction.None;
            newNode.ShowCheckBox       = false;
            newNode.Text               = newNode.Text;
            newNode.CssClass           = "AlreadySelected";
            newNode.PossiblySelectable = AlreadySelectedNodes.Contains(Node.NodeID);
        }
        else
        {
            if ((AllowAllTypes || ClassNames.Contains(Node.ClassName)))
            {
                newNode.PossiblySelectable = true;
                newNode.CssClass           = "Selectable";
                if (SelectionMode == "Checkbox")
                {
                    newNode.ShowCheckBox = true;
                    newNode.SelectAction = TreeNodeSelectAction.None;
                }
                else
                {
                    newNode.SelectAction = TreeNodeSelectAction.Select;
                }
            }
            else
            {
                newNode.SelectAction = TreeNodeSelectAction.None;
                newNode.CssClass     = "NotSelectable";
            }
        }
        return(newNode);
    }
Exemple #2
0
    private MacroResolver GetNodeMacroResolver(CMS.DocumentEngine.TreeNode Node)
    {
        string Culture = URLHelper.GetQueryValue(Request.RawUrl, "culture");

        return(CacheHelper.Cache <MacroResolver>(cs =>
        {
            MacroResolver resolver = MacroResolver.GetInstance();

            List <string> Columns = new List <string>();

            if (!string.IsNullOrWhiteSpace(ToolTipFormat))
            {
                Columns.AddRange(DataHelper.GetNotEmpty(MacroProcessor.GetMacros(ToolTipFormat, true), "NodeName").Split(';'));
            }
            if (!string.IsNullOrWhiteSpace(DisplayNameFormat))
            {
                Columns.AddRange(DataHelper.GetNotEmpty(MacroProcessor.GetMacros(DisplayNameFormat, true), "NodeName").Split(';'));
            }
            // Get data for this node and render it out
            DataSet FullData = new DocumentQuery(Node.ClassName)
                               .WhereEquals("NodeID", Node.NodeID)
                               .Columns(Columns)
                               .Culture(Culture)
                               .CombineWithDefaultCulture(true).Result;

            foreach (DataColumn item in FullData.Tables[0].Columns)
            {
                resolver.SetNamedSourceData(item.ColumnName, FullData.Tables[0].Rows[0][item.ColumnName]);
            }

            if (cs.Cached)
            {
                cs.CacheDependency = CacheHelper.GetCacheDependency("nodeid|" + Node.NodeID);
            }
            return resolver;
        }, new CacheSettings(CacheHelper.CacheMinutes(SiteContext.CurrentSiteName), "RelationshipTree_GetNodeMacroResolver", Node.NodeID, Culture, ToolTipFormat, DisplayNameFormat)));
    }
Exemple #3
0
    /// <summary>
    /// Initializes the category provider
    /// </summary>
    private void InitCategoryProvider()
    {
        // Create and set category provider
        UniTreeProvider categoryProvider = new UniTreeProvider();

        categoryProvider.DisplayNameColumn = "DisplayName";
        categoryProvider.IDColumn          = "ObjectID";
        categoryProvider.LevelColumn       = "ObjectLevel";
        categoryProvider.OrderColumn       = "CategoryOrder";
        categoryProvider.ParentIDColumn    = "ParentID";
        categoryProvider.PathColumn        = "ObjectPath";
        categoryProvider.ValueColumn       = "ObjectID";
        categoryProvider.ChildCountColumn  = "CompleteChildCount";
        categoryProvider.QueryName         = "cms.pagetemplatecategory.selectallview";
        categoryProvider.ObjectTypeColumn  = "ObjectType";
        categoryProvider.Columns           = "DisplayName, CodeName, ObjectID, ObjectLevel, CategoryOrder, ParentID, ObjectPath, CompleteChildCount, ObjectType, CategoryChildCount, CategoryImagePath, Parameter";
        categoryProvider.ImageColumn       = "CategoryImagePath";
        categoryProvider.ParameterColumn   = "Parameter";

        if (!SelectPageTemplates)
        {
            categoryProvider.WhereCondition   = "ObjectType = 'pagetemplatecategory'";
            categoryProvider.ChildCountColumn = "CategoryChildCount";
            categoryProvider.ObjectTypeColumn = "";
        }
        else
        {
            categoryProvider.OrderBy = "ObjectType DESC, DisplayName ASC";
        }

        // Do not show AdHoc category
        if (!ShowAdHocCategory)
        {
            categoryProvider.WhereCondition = SqlHelper.AddWhereCondition(categoryProvider.WhereCondition, "CodeName <> 'AdHoc' AND CodeName <> 'AdHocUI'");
        }

        // Do not show empty categories
        if (!ShowEmptyCategories)
        {
            categoryProvider.WhereCondition = SqlHelper.AddWhereCondition(categoryProvider.WhereCondition, "CategoryTemplateChildCount > 0 OR CategoryChildCount > 0");

            TreeProvider tp = new TreeProvider(MembershipContext.AuthenticatedUser);
            CMS.DocumentEngine.TreeNode node = DocumentHelper.GetDocument(DocumentID, tp);
            string culture = LocalizationContext.PreferredCultureCode;
            int    level   = 0;
            string path    = string.Empty;

            string className = String.Empty;

            if (node != null)
            {
                level = node.NodeLevel;
                path  = node.NodeAliasPath;
                if (IsNewPage)
                {
                    level++;
                    path = path + "/%";
                }
                else
                {
                    culture = node.DocumentCulture;
                }

                className = node.NodeClassName;

                // Check if class id is in query string - then use it's value instead of document class name
                int classID = QueryHelper.GetInteger("classid", 0);
                if (classID != 0)
                {
                    DataClassInfo dci = DataClassInfoProvider.GetDataClassInfo(classID);
                    if (dci != null)
                    {
                        className = dci.ClassName;
                    }
                }
            }

            // Add where condition for scopes
            categoryProvider.WhereCondition += " AND (ObjectLevel = 0 OR (SELECT TOP 1 ObjectID FROM View_CMS_PageTemplateCategoryPageTemplate_Joined AS X WHERE X.ObjectType = 'pagetemplate' ";

            categoryProvider.WhereCondition += " AND (X.PageTemplateType IS NULL OR X.PageTemplateType <> N'" + PageTemplateInfoProvider.GetPageTemplateTypeCode(PageTemplateTypeEnum.Dashboard) + "')";


            if (ShowOnlySiteTemplates)
            {
                categoryProvider.WhereCondition += " AND X.ObjectID IN (SELECT PageTemplateID FROM CMS_PageTemplateSite WHERE SiteID = " + SiteContext.CurrentSiteID + ") ";
            }

            if (node != null)
            {
                categoryProvider.WhereCondition += " AND (" + PageTemplateScopeInfoProvider.GetScopeWhereCondition(path, culture, className, level, SiteContext.CurrentSiteName, "X", "ObjectID") + ") ";
            }

            categoryProvider.WhereCondition += " AND (X.ObjectPath LIKE View_CMS_PageTemplateCategoryPageTemplate_Joined.ObjectPath + '/%')) IS NOT NULL)";

            // Add column count column - minimal number of children
            categoryProvider.Columns += @", (SELECT TOP 1 Count(*) FROM View_CMS_PageTemplateCategoryPageTemplate_Joined AS Y WHERE 
            (Y.ObjectID = View_CMS_PageTemplateCategoryPageTemplate_Joined.ObjectID AND Y.ObjectLevel = 0)
            OR ( View_CMS_PageTemplateCategoryPageTemplate_Joined.ObjectType = 'PageTemplateCategory' 
            AND View_CMS_PageTemplateCategoryPageTemplate_Joined.CategoryChildCount > 0 
            AND Y.ObjectType = 'PageTemplate' AND Y.ObjectLevel > View_CMS_PageTemplateCategoryPageTemplate_Joined.ObjectLevel + 1 ";

            if (ShowOnlySiteTemplates)
            {
                categoryProvider.Columns += "AND Y.ObjectID IN (SELECT PageTemplateID FROM CMS_PageTemplateSite WHERE SiteID = " + SiteContext.CurrentSiteID + ") ";
            }

            if (node != null)
            {
                categoryProvider.Columns += " AND ( " + PageTemplateScopeInfoProvider.GetScopeWhereCondition(path, culture, className, level, SiteContext.CurrentSiteName, "Y", "ObjectID") + " ) ";
            }

            categoryProvider.Columns         += " AND Y.ObjectPath LIKE  View_CMS_PageTemplateCategoryPageTemplate_Joined.ObjectPath + '/%')) AS MinNumberOfChilds";
            categoryProvider.ChildCountColumn = "MinNumberOfChilds";
        }

        // Handle the root path
        if (!String.IsNullOrEmpty(RootPath))
        {
            categoryProvider.RootLevelOffset = RootPath.Trim('/').Split('/').Length - 1;

            categoryProvider.WhereCondition = SqlHelper.AddWhereCondition(categoryProvider.WhereCondition, String.Format("((ObjectPath = '{0}' OR ObjectPath LIKE '{0}/%'))", RootPath.Trim('/')));
        }

        treeElem.ProviderObject = categoryProvider;
    }
    /// <summary>
    /// Initializes the category provider
    /// </summary>
    private void InitCategoryProvider()
    {
        // Create and set category provider
        UniTreeProvider categoryProvider = new UniTreeProvider();

        categoryProvider.DisplayNameColumn = "DisplayName";
        categoryProvider.IDColumn          = "ObjectID";
        categoryProvider.LevelColumn       = "ObjectLevel";
        categoryProvider.OrderColumn       = "CategoryOrder";
        categoryProvider.ParentIDColumn    = "ParentID";
        categoryProvider.PathColumn        = "ObjectPath";
        categoryProvider.ValueColumn       = "ObjectID";
        categoryProvider.ChildCountColumn  = "CompleteChildCount";
        categoryProvider.QueryName         = "cms.pagetemplatecategory.selectallview";
        categoryProvider.ObjectTypeColumn  = "ObjectType";
        categoryProvider.Columns           = "DisplayName, CodeName, ObjectID, ObjectLevel, CategoryOrder, ParentID, ObjectPath, CompleteChildCount, ObjectType, CategoryChildCount, CategoryImagePath, Parameter";
        categoryProvider.ImageColumn       = "CategoryImagePath";
        categoryProvider.ParameterColumn   = "Parameter";

        if (!SelectPageTemplates)
        {
            categoryProvider.WhereCondition   = "ObjectType = 'pagetemplatecategory'";
            categoryProvider.ChildCountColumn = "CategoryChildCount";
            categoryProvider.ObjectTypeColumn = "";
            treeElem.DefaultImagePath         = GetImageUrl("Objects/CMS_PageTemplateCategory/list.png");
        }
        else
        {
            categoryProvider.OrderBy = "ObjectType DESC, DisplayName ASC";
            treeElem.OnGetImage     += new CMSAdminControls_UI_Trees_UniTree.GetImageEventHandler(treeElem_OnGetImage);
        }

        // Do not show AdHoc category
        if (!ShowAdHocCategory)
        {
            categoryProvider.WhereCondition = SqlHelperClass.AddWhereCondition(categoryProvider.WhereCondition, "CodeName <> 'AdHoc'");
        }

        // Do not show empty categories
        if (!ShowEmptyCategories)
        {
            categoryProvider.WhereCondition = SqlHelperClass.AddWhereCondition(categoryProvider.WhereCondition, "CategoryTemplateChildCount > 0 OR CategoryChildCount > 0");

            TreeProvider tp = new TreeProvider(CMSContext.CurrentUser);
            CMS.DocumentEngine.TreeNode node = DocumentHelper.GetDocument(DocumentID, tp);
            string culture = CMSContext.PreferredCultureCode;
            int    level   = 0;
            string path    = string.Empty;

            if (node != null)
            {
                level = node.NodeLevel;
                path  = node.NodeAliasPath;
                if (IsNewPage)
                {
                    level++;
                    path = path + "/%";
                }
                else
                {
                    culture = node.DocumentCulture;
                }
            }

            // Add where condition for scopes
            categoryProvider.WhereCondition += " AND (ObjectLevel = 0 OR (SELECT TOP 1 ObjectID FROM View_CMS_PageTemplateCategoryPageTemplate_Joined AS X WHERE X.ObjectType = 'pagetemplate' ";

            categoryProvider.WhereCondition += " AND (X.PageTemplateType IS NULL OR X.PageTemplateType <> N'" + PageTemplateInfoProvider.GetPageTemplateTypeCode(PageTemplateTypeEnum.Dashboard) + "')";


            if (ShowOnlySiteTemplates)
            {
                categoryProvider.WhereCondition += " AND X.ObjectID IN (SELECT PageTemplateID FROM CMS_PageTemplateSite WHERE SiteID = " + CMSContext.CurrentSiteID + ") ";
            }

            if (node != null)
            {
                categoryProvider.WhereCondition += " AND (" + PageTemplateScopeInfoProvider.GetScopeWhereCondition(path, culture, node.NodeClassName, level, CMSContext.CurrentSiteName, "X", "ObjectID") + ") ";
            }

            categoryProvider.WhereCondition += " AND (X.ObjectPath LIKE View_CMS_PageTemplateCategoryPageTemplate_Joined.ObjectPath + '/%')) IS NOT NULL)";

            // Add column count column - minimal number of children
            categoryProvider.Columns += @", (SELECT TOP 1 Count(*) FROM View_CMS_PageTemplateCategoryPageTemplate_Joined AS Y WHERE 
            (Y.ObjectID = View_CMS_PageTemplateCategoryPageTemplate_Joined.ObjectID AND Y.ObjectLevel = 0)
            OR ( View_CMS_PageTemplateCategoryPageTemplate_Joined.ObjectType = 'PageTemplateCategory' 
            AND View_CMS_PageTemplateCategoryPageTemplate_Joined.CategoryChildCount > 0 
            AND Y.ObjectType = 'PageTemplate' AND Y.ObjectLevel > View_CMS_PageTemplateCategoryPageTemplate_Joined.ObjectLevel + 1 ";

            if (ShowOnlySiteTemplates)
            {
                categoryProvider.Columns += "AND Y.ObjectID IN (SELECT PageTemplateID FROM CMS_PageTemplateSite WHERE SiteID = " + CMSContext.CurrentSiteID + ") ";
            }

            if (node != null)
            {
                categoryProvider.Columns += " AND ( " + PageTemplateScopeInfoProvider.GetScopeWhereCondition(path, culture, node.NodeClassName, level, CMSContext.CurrentSiteName, "Y", "ObjectID") + " ) ";
            }

            categoryProvider.Columns         += " AND Y.ObjectPath LIKE  View_CMS_PageTemplateCategoryPageTemplate_Joined.ObjectPath + '/%')) AS MinNumberOfChilds";
            categoryProvider.ChildCountColumn = "MinNumberOfChilds";
        }

        // Handle the root path
        if (!String.IsNullOrEmpty(RootPath) && (RootPath != "/"))
        {
            categoryProvider.RootLevelOffset = RootPath.Split('/').Length - 1;

            categoryProvider.WhereCondition = SqlHelperClass.AddWhereCondition(categoryProvider.WhereCondition, String.Format("((ObjectPath = '{0}' OR ObjectPath LIKE '{0}/%'))", RootPath));
        }

        treeElem.ProviderObject = categoryProvider;
    }
    /// <summary>
    /// Appends given child object to the root node.
    /// </summary>
    /// <param name="root">Root node</param>
    /// <param name="colName">Name of the column</param>
    /// <param name="childObj">Child object to append</param>
    /// <param name="enumerate">Indicates if it's enumeration item</param>
    /// <param name="isPriorityTree">If true, nodes are appended to a priority tree</param>
    private void AppendChild(TreeNode root, string colName, object childObj, bool enumerate, bool isPriorityTree)
    {
        // Convert object property to value
        if (childObj is ObjectProperty)
        {
            object value = ((ObjectProperty)childObj).Value;
            AppendChild(root, colName, value, enumerate, isPriorityTree);

            return;
        }

        // Prepare the property name
        string col            = colName;
        string defaultIconUrl = null;

        if (enumerate)
        {
            if (childObj is InfoObjectCollection)
            {
                col = ((InfoObjectCollection)childObj).Name;
            }
            else if (childObj != null)
            {
                col = "[" + col + "]" + (DisplayValues ? " " + HTMLHelper.HTMLEncode(childObj.ToString()) : "");
            }
        }

        string name = col;

        if (ContextResolver.Context.DisablePageContextMacros)
        {
            if ((name.ToLowerCSafe() == "currentdocument") || (name.ToLowerCSafe() == "currentpageinfo"))
            {
                return;
            }
        }

        if (ContextResolver.Context.DisableContextObjectMacros)
        {
            if (name.EndsWithCSafe("context", true))
            {
                return;
            }
        }

        // Prepare the icon
        string iconUrl = GetImagePath("CMSModules/list.png");

        if (childObj is SettingsCategoryContainer)
        {
            // Get list icon of Settings category
            iconUrl = GetObjectIconPath(SiteObjectType.SETTINGSCATEGORY, "list.png");
        }
        else if (childObj is CollectionPropertyWrapper)
        {
            iconUrl = GetImagePath("Design/Controls/MacroEditor/list.png");
        }
        else if (childObj is InfoObjectCollection)
        {
            var colObj = (InfoObjectCollection)childObj;

            // Collection
            iconUrl        = GetObjectIconPath(colObj.ObjectType, "list.png");
            defaultIconUrl = GetDefaultIconUrl(colObj.TypeInfo);
        }
        else if (childObj is CMS.DocumentEngine.TreeNode)
        {
            // Document
            CMS.DocumentEngine.TreeNode node = (CMS.DocumentEngine.TreeNode)childObj;

            iconUrl = GetDocumentTypeIconPath(node.NodeClassName, null, true);

            string docName = node.GetDocumentName();

            if (enumerate)
            {
                name = "[" + colName + "] " + HTMLHelper.HTMLEncode(docName);
            }
            else
            {
                if (DisplayValues)
                {
                    name += " <span class=\"Info\">(" + HTMLHelper.HTMLEncode(docName) + ")</span>";
                    ;
                }
            }
        }
        else if (childObj is BaseInfo)
        {
            // Info object
            BaseInfo infoObj = (BaseInfo)childObj;

            iconUrl        = GetObjectIconPath(infoObj.ObjectType, "list.png");
            defaultIconUrl = GetDefaultIconUrl(infoObj.TypeInfo);

            string objName = infoObj.Generalized.ObjectDisplayName;
            if (!String.IsNullOrEmpty(objName))
            {
                if (enumerate)
                {
                    name = "[" + colName + "] " + (DisplayValues ? " " + HTMLHelper.HTMLEncode(objName) : "");
                }
                else
                {
                    if (DisplayValues)
                    {
                        name += " <span class=\"Info\">(" + HTMLHelper.HTMLEncode(objName) + ")</span>";
                    }
                }
            }
        }
        else if (childObj is PageInfo)
        {
            // Page info
            PageInfo pi = (PageInfo)childObj;
            iconUrl = GetDocumentTypeIconPath(pi.ClassName, "", false);
        }
        else if (childObj is IContext)
        {
            // Context
            iconUrl = GetImagePath("Design/Controls/MacroEditor/context.png");
        }
        else if (childObj is Exception)
        {
            // Error
            iconUrl = GetImagePath("Design/Controls/MacroEditor/error.png");
        }
        else
        {
            switch (col.ToLowerCSafe())
            {
            case "children":
                // Children
                iconUrl = GetImagePath("Design/Controls/MacroEditor/children.png");
                break;

            case "parent":
                // Parent
                iconUrl = GetImagePath("Design/Controls/MacroEditor/parent.png");
                break;

            default:
                if (childObj == null)
                {
                    // Null
                    iconUrl = GetImagePath("Design/Controls/MacroEditor/null.png");
                }
                else if (!IsSimpleValue(childObj))
                {
                    // Complex object
                    iconUrl = GetImagePath("Design/Controls/MacroEditor/repository.png");
                }
                else if (childObj is string)
                {
                    // Simple value
                    iconUrl = GetImagePath("Design/Controls/MacroEditor/string.png");
                }
                else if ((childObj is int) || (childObj is double) || (childObj is long))
                {
                    // Simple value
                    iconUrl = GetImagePath("Design/Controls/MacroEditor/number.png");
                }
                else if (childObj is bool)
                {
                    if ((bool)childObj)
                    {
                        // True
                        iconUrl = GetImagePath("Design/Controls/MacroEditor/true.png");
                    }
                    else
                    {
                        // False
                        iconUrl = GetImagePath("Design/Controls/MacroEditor/false.png");
                    }
                }
                else if (childObj is DateTime)
                {
                    // Simple value
                    iconUrl = GetImagePath("Design/Controls/MacroEditor/datetime.png");
                }
                else
                {
                    // Simple value
                    iconUrl = GetImagePath("Design/Controls/MacroEditor/value.png");
                }
                break;
            }
        }

        string icon = null;

        if (!String.IsNullOrEmpty(iconUrl))
        {
            // Check the existence of the file
            if (!File.Exists(Server.MapPath(iconUrl)))
            {
                if (defaultIconUrl == null)
                {
                    iconUrl = GetImagePath("CMSModules/list.png");
                }
                else
                {
                    iconUrl = defaultIconUrl;
                }
            }

            icon = "<img src=\"" + UIHelper.ResolveImageUrl(iconUrl) + "\" alt=\"\" style=\"border:0px;vertical-align:middle;\" class=\"Image16\" />";
        }

        bool isSimple = IsSimpleValue(childObj);

        // Append JS onclick action if defined, pass macro expression to the handler
        string jsHandler = "";

        if (!string.IsNullOrEmpty(OnNodeClickHandler))
        {
            string macroArg = root.ValuePath.Replace('/', '.') + (enumerate ? "[" + colName + "]" : "." + col);
            macroArg = HttpUtility.UrlDecode(macroArg);
            macroArg = macroArg.Replace(".[", "[").TrimStart('.');

            if (isPriorityTree)
            {
                jsHandler = OnNodeClickHandler + "(" + ScriptHelper.GetString(macroArg, true).Replace("\\\"", "&quot;") + ");";
            }
            else
            {
                jsHandler = OnNodeClickHandler + "(" + ScriptHelper.GetString(macroArg.Substring(MacroExpression.Length + 1), true).Replace("\\\"", "&quot;") + ");";
            }
        }

        // Create the node
        name = TextHelper.LimitLength(ResHelper.LocalizeString(name), 150, null, true);

        string text = "<span class=\"ContentTreeItem\" onclick=\"" + jsHandler + "return false;\">" + icon + "<span class=\"Name\">" + name + "</span></span>";

        TreeNode child = new TreeNode(text);

        child.ToolTip          = GetValueString(childObj, isSimple);
        child.Value            = HttpUtility.UrlEncode(enumerate ? "[" + colName + "]" : col);
        child.PopulateOnDemand = !isSimple;
        child.Expanded         = false;

        root.ChildNodes.Add(child);
    }