Member types: Prepare container support (#20715)

* Add MemberType/MemberTypeContainer to supported EntityContainer object types

* Implement MemberTypeContainerRepository

* Prepare base controller for MemberTypeTreeControllerBase.

* Revert "Prepare base controller for MemberTypeTreeControllerBase."

This reverts commit ad213a23add5e511b1fba6580ca563156cd9c043.

* Added foldersOnly flag in readiness for support in 17.1.

* Added foldersOnly flag in readiness for support in 17.1 (2).

---------

Co-authored-by: Ronald Barendse <ronald@barend.se>
This commit is contained in:
Andy Butland
2025-11-11 11:18:52 +01:00
committed by GitHub
parent 43688148ae
commit d687c4365a
5 changed files with 31 additions and 35 deletions

View File

@@ -30,6 +30,7 @@ public class RootMemberTypeTreeController : MemberTypeTreeControllerBase
public async Task<ActionResult<PagedViewModel<MemberTypeTreeItemResponseModel>>> Root(
CancellationToken cancellationToken,
int skip = 0,
int take = 100)
int take = 100,
bool foldersOnly = false)
=> await GetRoot(skip, take);
}

View File

@@ -1,4 +1,4 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Api.Common.ViewModels.Pagination;
using Umbraco.Cms.Api.Management.Services.Flags;
@@ -23,6 +23,7 @@ public class SiblingMemberTypeTreeController : MemberTypeTreeControllerBase
CancellationToken cancellationToken,
Guid target,
int before,
int after)
int after,
bool foldersOnly = false)
=> await GetSiblings(target, before, after);
}

View File

@@ -12,6 +12,7 @@ public sealed class EntityContainer : TreeEntityBase, IUmbracoEntity
{ Constants.ObjectTypes.DataType, Constants.ObjectTypes.DataTypeContainer },
{ Constants.ObjectTypes.DocumentType, Constants.ObjectTypes.DocumentTypeContainer },
{ Constants.ObjectTypes.MediaType, Constants.ObjectTypes.MediaTypeContainer },
{ Constants.ObjectTypes.MemberType, Constants.ObjectTypes.MemberTypeContainer },
{ Constants.ObjectTypes.DocumentBlueprint, Constants.ObjectTypes.DocumentBlueprintContainer },
};

View File

@@ -32,8 +32,11 @@ internal class EntityContainerRepository : EntityRepositoryBase<int, EntityConta
{
Guid[] allowedContainers =
{
Constants.ObjectTypes.DocumentTypeContainer, Constants.ObjectTypes.MediaTypeContainer,
Constants.ObjectTypes.DataTypeContainer, Constants.ObjectTypes.DocumentBlueprintContainer,
Constants.ObjectTypes.DataTypeContainer,
Constants.ObjectTypes.DocumentTypeContainer,
Constants.ObjectTypes.MediaTypeContainer,
Constants.ObjectTypes.MemberTypeContainer,
Constants.ObjectTypes.DocumentBlueprintContainer,
};
NodeObjectTypeId = containerObjectType;
if (allowedContainers.Contains(NodeObjectTypeId) == false)

View File

@@ -1,36 +1,26 @@
using Umbraco.Cms.Core.Models;
using Microsoft.Extensions.Logging;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Cache;
using Umbraco.Cms.Core.Persistence.Repositories;
using Umbraco.Cms.Infrastructure.Scoping;
namespace Umbraco.Cms.Infrastructure.Persistence.Repositories.Implement
namespace Umbraco.Cms.Infrastructure.Persistence.Repositories.Implement;
internal sealed class MemberTypeContainerRepository : EntityContainerRepository, IMemberTypeContainerRepository
{
/// <summary>
/// A no-op implementation of <see cref="IMemberTypeContainerRepository"/>, as containers aren't supported for members.
/// </summary>
/// <remarks>
/// Introduced to avoid inconsistencies with nullability of dependencies for type repositories for content, media and members.
/// </remarks>
internal sealed class MemberTypeContainerRepository : IMemberTypeContainerRepository
public MemberTypeContainerRepository(
IScopeAccessor scopeAccessor,
AppCaches cache,
ILogger<MemberTypeContainerRepository> logger,
IRepositoryCacheVersionService repositoryCacheVersionService,
ICacheSyncService cacheSyncService)
: base(
scopeAccessor,
cache,
logger,
Constants.ObjectTypes.MemberTypeContainer,
repositoryCacheVersionService,
cacheSyncService)
{
public void Delete(EntityContainer entity)
{
}
public bool Exists(int id) => false;
public EntityContainer? Get(Guid id) => null;
public IEnumerable<EntityContainer> Get(string name, int level) => Enumerable.Empty<EntityContainer>();
public bool HasDuplicateName(Guid parentKey, string name) => false;
public bool HasDuplicateName(int parentId, string name) => false;
public EntityContainer? Get(int id) => null;
public IEnumerable<EntityContainer> GetMany(params int[]? ids) => Enumerable.Empty<EntityContainer>();
public void Save(EntityContainer entity)
{
}
}
}