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
///