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; } }