using System; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using CMS.CMSHelper; using CMS.GlobalHelper; using CMS.Reporting; using CMS.SettingsProvider; using CMS.UIControls; public partial class CMSModules_Reporting_Controls_ReportTree : CMSAdminControl { #region "Variables" private int mMaxTreeNodes = -1; private bool mShowReports = true; private bool mUseMaxNodeLimit = true; /// /// Index used for item count under one node. /// private int mIndex = -1; #endregion #region "Public Properties" /// /// Indicates whether use max node limit stored in settings. /// public bool UseMaxNodeLimit { get { return mUseMaxNodeLimit; } set { mUseMaxNodeLimit = value; } } /// /// If false tree wont show reports but just categories. /// public bool ShowReports { set { mShowReports = value; } get { return mShowReports; } } /// /// Gets or sets select path. /// public string SelectPath { get { return treeElem.SelectPath; } set { treeElem.SelectPath = value; treeElem.ExpandPath = value; } } /// /// Maximum tree nodes shown under parent node - this value can be ignored if UseMaxNodeLimit set to false. /// public int MaxTreeNodes { get { if (mMaxTreeNodes < 0) { mMaxTreeNodes = SettingsKeyProvider.GetIntValue(CMSContext.CurrentSiteName + ".CMSMaxUITreeNodes"); } return mMaxTreeNodes; } set { mMaxTreeNodes = value; } } #endregion #region "Custom events" /// /// On selected item event handler. /// public delegate void ItemSelectedEventHandler(string selectedValue); /// /// On selected item event handler. /// public event ItemSelectedEventHandler OnItemSelected; #endregion #region "Methods" protected void Page_Load(object sender, EventArgs e) { if (StopProcessing) { return; } ScriptHelper.RegisterJQuery(Page); // 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 = "Reporting.ReportCategory.selectallview"; categoryProvider.ObjectTypeColumn = "ObjectType"; categoryProvider.Columns = "DisplayName, ObjectID, ObjectLevel,CategoryOrder,ParentID, ObjectPath, CompleteChildCount,ObjectType,CategoryChildCount, CategoryImagePath"; categoryProvider.ImageColumn = "CategoryImagePath"; if (!ShowReports) { categoryProvider.WhereCondition = "ObjectType = 'reportcategory'"; categoryProvider.ChildCountColumn = "CategoryChildCount"; categoryProvider.ObjectTypeColumn = ""; treeElem.DefaultImagePath = GetImageUrl("Objects/CMS_WebPartCategory/list.png"); treeElem.NodeTemplate = "##ICON## ##NODENAME##"; treeElem.SelectedNodeTemplate = "##ICON## ##NODENAME##"; } else { categoryProvider.OrderBy = "ObjectType DESC, DisplayName ASC"; treeElem.OnGetImage += new CMSAdminControls_UI_Trees_UniTree.GetImageEventHandler(treeElem_OnGetImage); treeElem.NodeTemplate = "##ICON## ##NODENAME##"; treeElem.SelectedNodeTemplate = "##ICON## ##NODENAME##"; } // Set up tree treeElem.ProviderObject = categoryProvider; treeElem.IsLiveSite = false; // Setup event handler treeElem.OnItemSelected += new CMSAdminControls_UI_Trees_UniTree.ItemSelectedEventHandler(treeElem_OnItemSelected); treeElem.UsePostBack = false; treeElem.OnNodeCreated += new CMSAdminControls_UI_Trees_UniTree.NodeCreatedEventHandler(treeElem_OnNodeCreated); } /// /// Used for maxnodes in collapsed node. /// private TreeNode treeElem_OnNodeCreated(DataRow itemData, TreeNode defaultNode) { if (UseMaxNodeLimit) { //Get parentID from data row int parentID = ValidationHelper.GetInteger(itemData.ItemArray[4], 0); string objectType = ValidationHelper.GetString(itemData.ItemArray[7], String.Empty); //Dont use maxnodes limitation for categories if (objectType.ToLowerCSafe() == "reportcategory") { return defaultNode; } //Increment index count in collapsing mIndex++; if (mIndex == MaxTreeNodes) { //Load parentid int parentParentID = 0; ReportCategoryInfo parentParent = ReportCategoryInfoProvider.GetReportCategoryInfo(parentID); if (parentParent != null) { parentParentID = parentParent.CategoryParentID; } TreeNode node = new TreeNode(); node.Text = "" + GetString("general.seelisting") + ""; return node; } if (mIndex > MaxTreeNodes) { return null; } } return defaultNode; } /// /// Page PreRender. /// protected void Page_PreRender(object sender, EventArgs e) { if (StopProcessing) { return; } treeElem.ReloadData(); } /// /// On selected item event. /// /// Selected value protected void treeElem_OnItemSelected(string selectedValue) { if (OnItemSelected != null) { OnItemSelected(selectedValue); } } /// /// On get image event. /// /// Current node private string treeElem_OnGetImage(UniTreeNode node) { if ((node != null) && (node.ItemData != null)) { string objectType = string.Empty; DataRow dr = (DataRow)node.ItemData; if (dr != null) { objectType = ValidationHelper.GetString(dr["ObjectType"], "").ToLowerCSafe(); } // Return image path if (objectType == "report") { return GetImageUrl("Objects/Reporting_Report/object.png"); } else if (objectType == "reportcategory") { return GetImageUrl("Objects/Reporting_ReportCategory/list_tree.png"); } } return String.Empty; } #endregion }