diff --git a/components/umbraco.controls/umbraco.controls.csproj b/components/umbraco.controls/umbraco.controls.csproj
index 9908f88aaa..55a0106984 100644
--- a/components/umbraco.controls/umbraco.controls.csproj
+++ b/components/umbraco.controls/umbraco.controls.csproj
@@ -100,6 +100,10 @@
{CCD75EC3-63DB-4184-B49D-51C1DD337230}
umbraco.cms
+
+ {C7CB79F0-1C97-4B33-BFA7-00731B579AE2}
+ umbraco.datalayer
+
{511F6D8D-7717-440A-9A57-A507E9A8B27F}
umbraco.interfaces
diff --git a/foreign dlls/ClientDependency.Core.dll b/foreign dlls/ClientDependency.Core.dll
index d5ebcade6f..af0f7462a9 100644
Binary files a/foreign dlls/ClientDependency.Core.dll and b/foreign dlls/ClientDependency.Core.dll differ
diff --git a/umbraco/cms/businesslogic/CMSNode.cs b/umbraco/cms/businesslogic/CMSNode.cs
index cc90d4d5c3..710c54d54d 100644
--- a/umbraco/cms/businesslogic/CMSNode.cs
+++ b/umbraco/cms/businesslogic/CMSNode.cs
@@ -131,6 +131,12 @@ namespace umbraco.cms.businesslogic
setupNode();
}
+ public CMSNode(IRecordsReader reader)
+ {
+ _id = reader.GetInt("id");
+ PopulateNodeFromReader(reader);
+ }
+
///
/// Used to persist object changes to the database. In Version3.0 it's just a stub for future compatibility
///
@@ -500,6 +506,15 @@ namespace umbraco.cms.businesslogic
}
}
+ public virtual int ChildCount
+ {
+ get
+ {
+ return SqlHelper.ExecuteScalar("SELECT COUNT(*) FROM umbracoNode where ParentID = @parentId",
+ SqlHelper.CreateParameter("@parentId", this.Id));
+ }
+ }
+
///
/// The basic recursive tree pattern
///
@@ -509,19 +524,21 @@ namespace umbraco.cms.businesslogic
get
{
System.Collections.ArrayList tmp = new System.Collections.ArrayList();
- IRecordsReader dr = SqlHelper.ExecuteReader("select id from umbracoNode where ParentID = " + this.Id + " And nodeObjectType = @type order by sortOrder",
- SqlHelper.CreateParameter("@type", this.nodeObjectType));
-
- while (dr.Read())
- tmp.Add(dr.GetInt("Id"));
+ IRecordsReader dr = SqlHelper.ExecuteReader("SELECT id, createDate, trashed, parentId, nodeObjectType, nodeUser, level, path, sortOrder, uniqueID, text FROM umbracoNode WHERE ParentID = @ParentID AND nodeObjectType = @type order by sortOrder",
+ SqlHelper.CreateParameter("@type", this.nodeObjectType), SqlHelper.CreateParameter("ParentID", this.Id));
+ while (dr.Read()){;
+ tmp.Add(new CMSNode(dr));
+ }
dr.Close();
CMSNode[] retval = new CMSNode[tmp.Count];
for (int i = 0; i < tmp.Count; i++)
- retval[i] = new CMSNode((int)tmp[i]);
-
+ {
+ //retval[i] = new CMSNode((int)tmp[i]);
+ retval[i] = (CMSNode)tmp[i];
+ }
return retval;
}
}
@@ -573,6 +590,8 @@ namespace umbraco.cms.businesslogic
return retval;
}
+
+
///
/// Given the protected modifier the CMSNode.MakeNew method can only be accessed by
/// derived classes > who by definition knows of its own objectType.
@@ -593,7 +612,7 @@ namespace umbraco.cms.businesslogic
if (level > 0)
{
parent = new CMSNode(parentId);
- sortOrder = parent.Children.Length + 1;
+ sortOrder = parent.ChildCount + 1;
path = parent.Path;
}
else
@@ -802,6 +821,21 @@ order by level,sortOrder";
SqlHelper.CreateParameter("@xml", x.OuterXml));
}
+ private void PopulateNodeFromReader(IRecordsReader dr)
+ {
+ if (dr.IsNull("uniqueID")) _uniqueID = Guid.NewGuid();
+ else _uniqueID = dr.GetGuid("uniqueID");
+
+ _nodeObjectType = dr.GetGuid("nodeObjectType");
+ _level = dr.GetShort("level");
+ _path = dr.GetString("path");
+ _parentid = dr.GetInt("parentId");
+ _text = dr.GetString("text");
+ _sortOrder = dr.GetInt("sortOrder");
+ _userId = dr.GetInt("nodeUser");
+ _createDate = dr.GetDateTime("createDate");
+ }
+
private void XmlPopulate(XmlDocument xd, XmlNode x, bool Deep)
{
// attributes
diff --git a/umbraco/cms/businesslogic/template/Template.cs b/umbraco/cms/businesslogic/template/Template.cs
index e79a06db33..3b4c08c523 100644
--- a/umbraco/cms/businesslogic/template/Template.cs
+++ b/umbraco/cms/businesslogic/template/Template.cs
@@ -181,16 +181,22 @@ namespace umbraco.cms.businesslogic.template
get { return (_mastertemplate > 0); }
}
+ private bool _hasChildrenInitialized = false;
+ private bool _hasChildren;
public override bool HasChildren
{
get
{
- return
- SqlHelper.ExecuteScalar("select count(NodeId) as tmp from cmsTemplate where master = " + Id) > 0;
+ if (!_hasChildrenInitialized)
+ {
+ _hasChildren = SqlHelper.ExecuteScalar("select count(NodeId) as tmp from cmsTemplate where master = " + Id) > 0;
+ }
+ return _hasChildren;
}
set
{
- base.HasChildren = value;
+ _hasChildrenInitialized = true;
+ _hasChildren = value;
}
}
diff --git a/umbraco/cms/businesslogic/web/DocumentType.cs b/umbraco/cms/businesslogic/web/DocumentType.cs
index 7d51541897..f55a1a2ca4 100644
--- a/umbraco/cms/businesslogic/web/DocumentType.cs
+++ b/umbraco/cms/businesslogic/web/DocumentType.cs
@@ -104,17 +104,22 @@ namespace umbraco.cms.businesslogic.web
}
}
+ private bool _hasChildrenInitialized = false;
+ private bool _hasChildren;
public override bool HasChildren
{
get
{
- return
- SqlHelper.ExecuteScalar("select count(NodeId) as tmp from cmsContentType where masterContentType = " + Id) > 0;
-
+ if (!_hasChildrenInitialized)
+ {
+ HasChildren = SqlHelper.ExecuteScalar("select count(NodeId) as tmp from cmsContentType where masterContentType = " + Id) > 0;
+ }
+ return _hasChildren;
}
set
{
- base.HasChildren = value;
+ _hasChildrenInitialized = true;
+ _hasChildren = value;
}
}