This commit is contained in:
l.gabrysiak 2024-09-14 18:28:29 +02:00
parent 8aba94f721
commit 75ddaf8931
1 changed files with 27 additions and 11 deletions

View File

@ -3,6 +3,11 @@ using Umbraco.Cms.Core.Web;
using Umbraco.Cms.Core.Models.PublishedContent; using Umbraco.Cms.Core.Models.PublishedContent;
using Newtonsoft.Json; using Newtonsoft.Json;
using System.Data; using System.Data;
using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
using System.Text.Json;
using Umbraco.Cms.Core;
using System.Reflection;
using System.Dynamic;
namespace UmbracoDocs.Samples; namespace UmbracoDocs.Samples;
@ -35,7 +40,13 @@ public class GetMenuController : Controller
new DataColumn("id", typeof(int)), new DataColumn("id", typeof(int)),
new DataColumn("name", typeof(string)), new DataColumn("name", typeof(string)),
new DataColumn("type", typeof(string)), new DataColumn("type", typeof(string)),
new DataColumn("parentid", typeof(int)) new DataColumn("slug", typeof(string)),
new DataColumn("parentid", typeof(int)),
new DataColumn("position", typeof(int)) {
AutoIncrement = true,
AutoIncrementSeed = 1, // Początkowa wartość
AutoIncrementStep = 1 // Krok zwiększania
}
} }
}; };
@ -54,26 +65,26 @@ public class GetMenuController : Controller
var result = ( var result = (
from org in dataTable.AsEnumerable() from org in dataTable.AsEnumerable()
where where
org.Field<string>("type") == "organization" && org.Field<string>("type") == "organization" &&
org.Field<string>("name")!.ToLower() == Uri.UnescapeDataString(organization).ToLower() org.Field<string>("name")!.ToLower() == Uri.UnescapeDataString(organization).ToLower()
from from
dom in dataTable.AsEnumerable() dom in dataTable.AsEnumerable()
where where
dom.Field<int?>("parentid") == org.Field<int>("id") && dom.Field<int?>("parentid") == org.Field<int>("id") &&
dom.Field<string>("type") == "domains" && dom.Field<string>("type") == "domains" &&
dom.Field<string>("name")!.ToLower() == Uri.UnescapeDataString(domain).ToLower() dom.Field<string>("name")!.ToLower() == Uri.UnescapeDataString(domain).ToLower()
join child in dataTable.AsEnumerable() on dom.Field<int>("id") equals child.Field<int?>("parentid") join child in dataTable.AsEnumerable() on dom.Field<int>("id") equals child.Field<int?>("parentid")
select child) select child)
.Union( .Union(
from from
org in dataTable.AsEnumerable() org in dataTable.AsEnumerable()
where where
org.Field<string>("type") == "organization" && org.Field<string>("type") == "organization" &&
org.Field<string>("name")!.ToLower() == Uri.UnescapeDataString(organization).ToLower() org.Field<string>("name")!.ToLower() == Uri.UnescapeDataString(organization).ToLower()
from from
dom in dataTable.AsEnumerable() dom in dataTable.AsEnumerable()
where where
dom.Field<int?>("parentid") == org.Field<int>("id") && dom.Field<int?>("parentid") == org.Field<int>("id") &&
dom.Field<string>("type") == "domains" && dom.Field<string>("type") == "domains" &&
dom.Field<string>("name")!.ToLower() == Uri.UnescapeDataString(domain).ToLower() dom.Field<string>("name")!.ToLower() == Uri.UnescapeDataString(domain).ToLower()
@ -84,8 +95,10 @@ public class GetMenuController : Controller
{ {
id = child.Field<int>("id"), id = child.Field<int>("id"),
name = child.Field<string>("name"), name = child.Field<string>("name"),
slug = child.Field<string>("slug"),
type = child.Field<string>("type"), type = child.Field<string>("type"),
parentid = child.Field<int?>("parentid") parentid = child.Field<int?>("parentid"),
position = child.Field<int?>("position")
}); });
var allIds = result.Select(row => row.id).ToHashSet(); var allIds = result.Select(row => row.id).ToHashSet();
@ -94,7 +107,9 @@ public class GetMenuController : Controller
id = row.id, id = row.id,
name = row.name, name = row.name,
type = row.type, type = row.type,
parentid = row.parentid.HasValue && !allIds.Contains(row.parentid.Value) ? (int?)null : row.parentid slug = row.slug,
parentid = row.parentid.HasValue && !allIds.Contains(row.parentid.Value) ? (int?)null : row.parentid,
position = row.position
}).ToList(); }).ToList();
Console.WriteLine(JsonConvert.SerializeObject(modifiedResult, Formatting.Indented)); Console.WriteLine(JsonConvert.SerializeObject(modifiedResult, Formatting.Indented));
@ -132,7 +147,8 @@ public class GetMenuController : Controller
x.Id, x.Id,
x.Name, x.Name,
x.ContentType.Alias, x.ContentType.Alias,
x.Parent?.Id ?? null! x.Value<string>("slug") ?? null!,
x.Parent?.Id ?? null!,
}, LoadOption.PreserveChanges); }, LoadOption.PreserveChanges);
if (x.Children != null && x.Children.Any()) if (x.Children != null && x.Children.Any())
{ {