Fixes: U4-6771 Sorting editorstyles is not possible

This commit is contained in:
Shannon
2015-07-23 14:27:54 +02:00
parent cd578b7b19
commit 7cd47114e0
4 changed files with 104 additions and 57 deletions

View File

@@ -48,7 +48,7 @@
<thead>
<tr>
<th style="width: 100%">Name</th>
<th class="nowrap">Creation date</th>
<th class="nowrap" style="display: <%=HideDateColumn ? "none;" : "block;" %>">Creation date</th>
<th class="nowrap">Sort order</th>
</tr>
</thead>

View File

@@ -59,7 +59,7 @@
$.ajax({
type: "POST",
url: self._opts.serviceUrl,
data: '{ "ParentId": ' + parseInt(self._opts.currentId) + ', "SortOrder": "' + sortOrder + '"}',
data: '{ "ParentId": "' + self._opts.currentId + '", "SortOrder": "' + sortOrder + '"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {

View File

@@ -23,6 +23,12 @@ namespace umbraco.cms.presentation
{
private readonly List<SortableNode> _nodes = new List<SortableNode>();
protected bool HideDateColumn
{
set { ViewState["HideDateColumn"] = value; }
get { return ViewState["HideDateColumn"] == null ? false : (bool) ViewState["HideDateColumn"]; }
}
protected override void OnInit(EventArgs e)
{
CurrentApp = helper.Request("app");
@@ -56,13 +62,13 @@ namespace umbraco.cms.presentation
if (parentId == -1)
{
foreach (var child in mediaService.GetRootMedia().ToList().OrderBy(x => x.SortOrder))
_nodes.Add(CreateNode(child.Id, child.SortOrder, child.Name, child.CreateDate, icon));
_nodes.Add(CreateNode(child.Id.ToInvariantString(), child.SortOrder, child.Name, child.CreateDate, icon));
}
else
{
var children = mediaService.GetChildren(parentId);
foreach (var child in children.OrderBy(x => x.SortOrder))
_nodes.Add(CreateNode(child.Id, child.SortOrder, child.Name, child.CreateDate, icon));
_nodes.Add(CreateNode(child.Id.ToInvariantString(), child.SortOrder, child.Name, child.CreateDate, icon));
}
}
@@ -73,29 +79,41 @@ namespace umbraco.cms.presentation
if (parentId == -1)
{
foreach (var child in contentService.GetRootContent().ToList().OrderBy(x => x.SortOrder))
_nodes.Add(CreateNode(child.Id, child.SortOrder, child.Name, child.CreateDate, icon));
_nodes.Add(CreateNode(child.Id.ToInvariantString(), child.SortOrder, child.Name, child.CreateDate, icon));
}
else
{
var children = contentService.GetChildren(parentId);
foreach (var child in children)
_nodes.Add(CreateNode(child.Id, child.SortOrder, child.Name, child.CreateDate, icon));
_nodes.Add(CreateNode(child.Id.ToInvariantString(), child.SortOrder, child.Name, child.CreateDate, icon));
}
}
bindNodesToList(string.Empty);
}
else
{
// hack for stylesheet, used to sort stylesheet properties
if (app == Constants.Applications.Settings)
{
icon = "../images/umbraco/settingCss.gif";
var ss = new StyleSheet(parentId);
foreach (var child in ss.Properties)
{
var node = new CMSNode(child.Id);
_nodes.Add(CreateNode(child.Id, node.sortOrder, child.Text, child.CreateDateTime, icon));
}
}
bindNodesToList(string.Empty);
HideDateColumn = true;
var stylesheetName = Request.GetItemAsString("ID");
if (stylesheetName.IsNullOrWhiteSpace())throw new NullReferenceException("No Id passed in to editor");
var stylesheet = Services.FileService.GetStylesheetByName(stylesheetName.EnsureEndsWith(".css"));
if (stylesheet == null) throw new InvalidOperationException("No stylesheet found by name " + stylesheetName);
var sort = 0;
foreach (var child in stylesheet.Properties)
{
_nodes.Add(CreateNode(child.Name, sort, child.Name, DateTime.Now, icon));
sort++;
}
bindNodesToList(string.Empty);
}
}
}
@@ -115,10 +133,12 @@ namespace umbraco.cms.presentation
}
foreach (var n in _nodes)
lt_nodes.Text += string.Format("<tr id='node_{0}'><td>{1}</td><td class='nowrap'>{2} {3}</td><td style='text-align: center;'>{4}</td></tr>", n.id, n.Name, n.createDate.ToShortDateString(), n.createDate.ToShortTimeString(), n.sortOder);
lt_nodes.Text += string.Format(
"<tr id='node_{0}'><td>{1}</td><td class='nowrap' style='display:{5};'>{2} {3}</td><td style='text-align: center;'>{4}</td></tr>",
n.id, n.Name, n.createDate.ToShortDateString(), n.createDate.ToShortTimeString(), n.sortOder, HideDateColumn ? "none" : "block");
}
private static SortableNode CreateNode(int id, int sortOrder, string name, DateTime createDateTime, string icon)
private static SortableNode CreateNode(string id, int sortOrder, string name, DateTime createDateTime, string icon)
{
var node = new SortableNode
{
@@ -133,7 +153,7 @@ namespace umbraco.cms.presentation
public struct SortableNode
{
public int id;
public string id;
public int sortOder;
public string Name;
public string icon;

View File

@@ -31,54 +31,70 @@ namespace umbraco.presentation.webservices
public class nodeSorter : UmbracoAuthorizedWebService
{
[WebMethod]
public SortNode GetNodes(int ParentId, string App)
public SortNode GetNodes(string ParentId, string App)
{
if (BasePage.ValidateUserContextID(BasePage.umbracoUserContextID))
{
var parent = new SortNode { Id = ParentId };
var nodes = new List<SortNode>();
var entityService = base.ApplicationContext.Services.EntityService;
// Root nodes?
if (ParentId == -1)
// "hack for stylesheet"
if (App == "settings")
{
if (App == "media")
var stylesheet = Services.FileService.GetStylesheetByName(ParentId.EnsureEndsWith(".css"));
if (stylesheet == null) throw new InvalidOperationException("No stylesheet found by name " + ParentId);
var sort = 0;
foreach (var child in stylesheet.Properties)
{
var rootMedia = entityService.GetRootEntities(UmbracoObjectTypes.Media);
nodes.AddRange(rootMedia.Select(media => new SortNode(media.Id, media.SortOrder, media.Name, media.CreateDate)));
nodes.Add(new SortNode(child.Name.GetHashCode(), sort, child.Name, DateTime.Now));
sort++;
}
else
return new SortNode()
{
var rootContent = entityService.GetRootEntities(UmbracoObjectTypes.Document);
nodes.AddRange(rootContent.Select(content => new SortNode(content.Id, content.SortOrder, content.Name, content.CreateDate)));
}
SortNodes = nodes.ToArray()
};
}
else
{
// "hack for stylesheet"
if (App == "settings")
var asInt = int.Parse(ParentId);
var parent = new SortNode { Id = asInt };
var entityService = base.ApplicationContext.Services.EntityService;
// Root nodes?
if (asInt == -1)
{
var cmsNode = new cms.businesslogic.CMSNode(ParentId);
var styleSheet = new StyleSheet(cmsNode.Id);
nodes.AddRange(styleSheet.Properties.Select(child => new SortNode(child.Id, child.sortOrder, child.Text, child.CreateDateTime)));
if (App == "media")
{
var rootMedia = entityService.GetRootEntities(UmbracoObjectTypes.Media);
nodes.AddRange(rootMedia.Select(media => new SortNode(media.Id, media.SortOrder, media.Name, media.CreateDate)));
}
else
{
var rootContent = entityService.GetRootEntities(UmbracoObjectTypes.Document);
nodes.AddRange(rootContent.Select(content => new SortNode(content.Id, content.SortOrder, content.Name, content.CreateDate)));
}
}
else
{
var children = entityService.GetChildren(ParentId);
var children = entityService.GetChildren(asInt);
nodes.AddRange(children.Select(child => new SortNode(child.Id, child.SortOrder, child.Name, child.CreateDate)));
}
parent.SortNodes = nodes.ToArray();
return parent;
}
parent.SortNodes = nodes.ToArray();
return parent;
}
throw new ArgumentException("User not logged in");
}
[WebMethod]
public void UpdateSortOrder(int ParentId, string SortOrder)
public void UpdateSortOrder(string ParentId, string SortOrder)
{
if (AuthorizeRequest() == false) return;
if (SortOrder.Trim().Length <= 0) return;
@@ -92,13 +108,17 @@ namespace umbraco.presentation.webservices
var ids = SortOrder.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);
if (isContent)
SortContent(ids, ParentId);
if (isMedia)
{
SortContent(ids, int.Parse(ParentId));
}
else if (isMedia)
{
SortMedia(ids);
if (isContent == false && isMedia == false)
SortStylesheetProperties(ids);
}
else
{
SortStylesheetProperties(ParentId, ids);
}
}
private void SortMedia(string[] ids)
@@ -123,20 +143,27 @@ namespace umbraco.presentation.webservices
}
}
private void SortStylesheetProperties(string[] ids)
private void SortStylesheetProperties(string stylesheetName, string[] names)
{
try
var stylesheet = Services.FileService.GetStylesheetByName(stylesheetName.EnsureEndsWith(".css"));
if (stylesheet == null) throw new InvalidOperationException("No stylesheet found by name " + stylesheetName);
var currProps = stylesheet.Properties.ToArray();
//remove them all first
foreach (var prop in currProps)
{
for (var i = 0; i < ids.Length; i++)
{
var id = int.Parse(ids[i]);
new cms.businesslogic.CMSNode(id).sortOrder = i;
}
stylesheet.RemoveProperty(prop.Name);
}
catch (Exception ex)
//re-add them in the right order
for (var i = 0; i < names.Length; i++)
{
LogHelper.Error<nodeSorter>("Could not update stylesheet property sort order", ex);
var found = currProps.Single(x => x.Name == names[i]);
stylesheet.AddProperty(found);
}
Services.FileService.SaveStylesheet(stylesheet);
}
private void SortContent(string[] ids, int parentId)
@@ -168,7 +195,7 @@ namespace umbraco.presentation.webservices
LogHelper.Error<nodeSorter>("Could not update content sort order", ex);
}
}
}
[Serializable]