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
}