diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/nodeSorter.asmx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/nodeSorter.asmx.cs index 7f37b9bd44..fa37d28d1f 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/nodeSorter.asmx.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/webservices/nodeSorter.asmx.cs @@ -88,14 +88,16 @@ namespace umbraco.presentation.webservices { if (tmp[i] != "" && tmp[i].Trim() != "") { - new cms.businesslogic.CMSNode(int.Parse(tmp[i])).sortOrder = i; - if (isContent) { var document = new Document(int.Parse(tmp[i])); + var published = document.Published; + document.sortOrder = i; + document.Save(); // refresh the xml for the sorting to work - if (document.Published) + if (published) { + document.Publish(BusinessLogic.User.GetCurrent()); document.refreshXmlSortOrder(); library.UpdateDocumentCache(int.Parse(tmp[i])); } @@ -103,7 +105,13 @@ namespace umbraco.presentation.webservices // to update the sortorder of the media node in the XML, re-save the node.... else if (isMedia) { - new cms.businesslogic.media.Media(int.Parse(tmp[i])).Save(); + var media = new cms.businesslogic.media.Media(int.Parse(tmp[i])); + media.sortOrder = i; + media.Save(); + } + else + { + new cms.businesslogic.CMSNode(int.Parse(tmp[i])).sortOrder = i; } } } @@ -123,9 +131,6 @@ namespace umbraco.presentation.webservices library.RefreshContent(); } - //TODO: Properly refactor this, we're just clearing the cache so the new sortorder will also be visible in the backoffice - InMemoryCacheProvider.Current.Clear(); - // fire actionhandler, check for content if ((helper.Request("app") == "content" | helper.Request("app") == "") && ParentId > 0) global::umbraco.BusinessLogic.Actions.Action.RunActionHandlers(new Document(ParentId), ActionSort.Instance); diff --git a/src/umbraco.cms/businesslogic/CMSNode.cs b/src/umbraco.cms/businesslogic/CMSNode.cs index 761d11fbdd..4765291f0a 100644 --- a/src/umbraco.cms/businesslogic/CMSNode.cs +++ b/src/umbraco.cms/businesslogic/CMSNode.cs @@ -680,7 +680,7 @@ order by level,sortOrder"; /// Determines if the node is in the recycle bin. /// This is only relavent for node types that support a recyle bin (such as Document/Media) /// - public bool IsTrashed + public virtual bool IsTrashed { get { @@ -704,7 +704,7 @@ order by level,sortOrder"; /// Gets or sets the sort order. /// /// The sort order. - public int sortOrder + public virtual int sortOrder { get { return _sortOrder; } set @@ -718,7 +718,7 @@ order by level,sortOrder"; /// Gets or sets the create date time. /// /// The create date time. - public DateTime CreateDateTime + public virtual DateTime CreateDateTime { get { return _createDate; } set @@ -752,7 +752,7 @@ order by level,sortOrder"; /// /// Get the newParent id of the node /// - public int ParentId + public virtual int ParentId { get { return _parentid; } } @@ -780,7 +780,7 @@ order by level,sortOrder"; /// that indicates the path from the topmost node to the given node /// /// The path. - public string Path + public virtual string Path { get { return _path; } set @@ -795,7 +795,7 @@ order by level,sortOrder"; /// tree structure the given node is /// /// The level. - public int Level + public virtual int Level { get { return _level; } set diff --git a/src/umbraco.cms/businesslogic/media/Media.cs b/src/umbraco.cms/businesslogic/media/Media.cs index 2235eac510..f7dd6d62b2 100644 --- a/src/umbraco.cms/businesslogic/media/Media.cs +++ b/src/umbraco.cms/businesslogic/media/Media.cs @@ -203,6 +203,71 @@ namespace umbraco.cms.businesslogic.media #endregion #region Public Properties + public override int sortOrder + { + get + { + return _media == null ? base.sortOrder : _media.SortOrder; + } + set + { + if (_media == null) + { + base.sortOrder = value; + } + else + { + _media.SortOrder = value; + } + } + } + + public override int Level + { + get + { + return _media == null ? base.Level : _media.Level; + } + set + { + if (_media == null) + { + base.Level = value; + } + else + { + _media.Level = value; + } + } + } + + public override int ParentId + { + get + { + return _media == null ? base.ParentId : _media.ParentId; + } + } + + public override string Path + { + get + { + return _media == null ? base.Path : _media.Path; + } + set + { + if (_media == null) + { + base.Path = value; + } + else + { + _media.Path = value; + } + } + } + /// /// Retrieve a list of all medias underneath the current /// diff --git a/src/umbraco.cms/businesslogic/web/Document.cs b/src/umbraco.cms/businesslogic/web/Document.cs index 4f7699f9fb..8fdb89b9e4 100644 --- a/src/umbraco.cms/businesslogic/web/Document.cs +++ b/src/umbraco.cms/businesslogic/web/Document.cs @@ -524,6 +524,71 @@ namespace umbraco.cms.businesslogic.web #region Public Properties + public override int sortOrder + { + get + { + return Content == null ? base.sortOrder : Content.SortOrder; + } + set + { + if (Content == null) + { + base.sortOrder = value; + } + else + { + Content.SortOrder = value; + } + } + } + + public override int Level + { + get + { + return Content == null ? base.Level : Content.Level; + } + set + { + if (Content == null) + { + base.Level = value; + } + else + { + Content.Level = value; + } + } + } + + public override int ParentId + { + get + { + return Content == null ? base.ParentId : Content.ParentId; + } + } + + public override string Path + { + get + { + return Content == null ? base.Path : Content.Path; + } + set + { + if (Content == null) + { + base.Path = value; + } + else + { + Content.Path = value; + } + } + } + /// /// Gets a value indicating whether the document was constructed for the optimized mode ///