Merge branch 'v17/dev' of https://github.com/umbraco/Umbraco-CMS into v17/dev

This commit is contained in:
Andy Butland
2025-09-16 14:11:49 +02:00

View File

@@ -21,14 +21,12 @@ namespace Umbraco.Cms.Core.Services.Implement
/// </summary>
public class DataTypeService : RepositoryService, IDataTypeService
{
private readonly IDataValueEditorFactory _dataValueEditorFactory;
private readonly IDataTypeRepository _dataTypeRepository;
private readonly IDataTypeContainerRepository _dataTypeContainerRepository;
private readonly IContentTypeRepository _contentTypeRepository;
private readonly IMediaTypeRepository _mediaTypeRepository;
private readonly IMemberTypeRepository _memberTypeRepository;
private readonly IAuditService _auditService;
private readonly IIOHelper _ioHelper;
private readonly IDataTypeContainerService _dataTypeContainerService;
private readonly IUserIdKeyResolver _userIdKeyResolver;
private readonly Lazy<IIdKeyMap> _idKeyMap;
@@ -38,22 +36,18 @@ namespace Umbraco.Cms.Core.Services.Implement
ILoggerFactory loggerFactory,
IEventMessagesFactory eventMessagesFactory,
IDataTypeRepository dataTypeRepository,
IDataValueEditorFactory dataValueEditorFactory,
IAuditService auditService,
IContentTypeRepository contentTypeRepository,
IMediaTypeRepository mediaTypeRepository,
IMemberTypeRepository memberTypeRepository,
IIOHelper ioHelper,
Lazy<IIdKeyMap> idKeyMap)
: base(provider, loggerFactory, eventMessagesFactory)
{
_dataValueEditorFactory = dataValueEditorFactory;
_dataTypeRepository = dataTypeRepository;
_auditService = auditService;
_contentTypeRepository = contentTypeRepository;
_mediaTypeRepository = mediaTypeRepository;
_memberTypeRepository = memberTypeRepository;
_ioHelper = ioHelper;
_idKeyMap = idKeyMap;
// resolve dependencies for obsolete methods through the static service provider, so they don't pollute the constructor signature
@@ -62,7 +56,31 @@ namespace Umbraco.Cms.Core.Services.Implement
_userIdKeyResolver = StaticServiceProvider.Instance.GetRequiredService<IUserIdKeyResolver>();
}
[Obsolete("Use the non-obsolete constructor instead. Scheduled removal in v19.")]
[Obsolete("Use the non-obsolete constructor instead. Scheduled removal in v18.")]
public DataTypeService(
ICoreScopeProvider provider,
ILoggerFactory loggerFactory,
IEventMessagesFactory eventMessagesFactory,
IDataTypeRepository dataTypeRepository,
IAuditRepository auditRepository,
IContentTypeRepository contentTypeRepository,
IMediaTypeRepository mediaTypeRepository,
IMemberTypeRepository memberTypeRepository,
Lazy<IIdKeyMap> idKeyMap)
: this(
provider,
loggerFactory,
eventMessagesFactory,
dataTypeRepository,
StaticServiceProvider.Instance.GetRequiredService<IAuditService>(),
contentTypeRepository,
mediaTypeRepository,
memberTypeRepository,
idKeyMap)
{
}
[Obsolete("Use the non-obsolete constructor instead. Scheduled removal in v18.")]
public DataTypeService(
ICoreScopeProvider provider,
ILoggerFactory loggerFactory,
@@ -80,17 +98,15 @@ namespace Umbraco.Cms.Core.Services.Implement
loggerFactory,
eventMessagesFactory,
dataTypeRepository,
dataValueEditorFactory,
StaticServiceProvider.Instance.GetRequiredService<IAuditService>(),
contentTypeRepository,
mediaTypeRepository,
memberTypeRepository,
ioHelper,
idKeyMap)
{
}
[Obsolete("Use the non-obsolete constructor instead. Scheduled removal in v19.")]
[Obsolete("Use the non-obsolete constructor instead. Scheduled removal in v18.")]
public DataTypeService(
ICoreScopeProvider provider,
ILoggerFactory loggerFactory,
@@ -109,12 +125,10 @@ namespace Umbraco.Cms.Core.Services.Implement
loggerFactory,
eventMessagesFactory,
dataTypeRepository,
dataValueEditorFactory,
auditService,
contentTypeRepository,
mediaTypeRepository,
memberTypeRepository,
ioHelper,
idKeyMap)
{
}
@@ -289,7 +303,6 @@ namespace Umbraco.Cms.Core.Services.Implement
{
using ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true);
IDataType? dataType = _dataTypeRepository.Get(Query<IDataType>().Where(x => x.Name == name))?.FirstOrDefault();
ConvertMissingEditorOfDataTypeToLabel(dataType);
return Task.FromResult(dataType);
}
@@ -306,7 +319,6 @@ namespace Umbraco.Cms.Core.Services.Implement
}
IDataType[] dataTypes = _dataTypeRepository.Get(query).ToArray();
ConvertMissingEditorsOfDataTypesToLabels(dataTypes);
return Task.FromResult<IEnumerable<IDataType>>(dataTypes);
}
@@ -350,7 +362,6 @@ namespace Umbraco.Cms.Core.Services.Implement
{
using ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true);
IDataType? dataType = _dataTypeRepository.Get(id);
ConvertMissingEditorOfDataTypeToLabel(dataType);
return dataType;
}
@@ -360,7 +371,6 @@ namespace Umbraco.Cms.Core.Services.Implement
{
using ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true);
IDataType? dataType = GetDataTypeFromRepository(id);
ConvertMissingEditorOfDataTypeToLabel(dataType);
return Task.FromResult(dataType);
}
@@ -380,7 +390,6 @@ namespace Umbraco.Cms.Core.Services.Implement
using ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true);
IQuery<IDataType> query = Query<IDataType>().Where(x => x.EditorAlias == propertyEditorAlias);
IEnumerable<IDataType> dataTypes = _dataTypeRepository.Get(query).ToArray();
ConvertMissingEditorsOfDataTypesToLabels(dataTypes);
return Task.FromResult(dataTypes);
}
@@ -391,7 +400,6 @@ namespace Umbraco.Cms.Core.Services.Implement
using ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true);
IQuery<IDataType> query = Query<IDataType>().Where(x => propertyEditorAlias.Contains(x.EditorAlias));
IEnumerable<IDataType> dataTypes = _dataTypeRepository.Get(query).ToArray();
ConvertMissingEditorsOfDataTypesToLabels(dataTypes);
return Task.FromResult(dataTypes);
}
@@ -401,7 +409,6 @@ namespace Umbraco.Cms.Core.Services.Implement
using ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true);
IQuery<IDataType> query = Query<IDataType>().Where(x => x.EditorUiAlias == editorUiAlias);
IEnumerable<IDataType> dataTypes = _dataTypeRepository.Get(query).ToArray();
ConvertMissingEditorsOfDataTypesToLabels(dataTypes);
return Task.FromResult(dataTypes);
}
@@ -415,32 +422,10 @@ namespace Umbraco.Cms.Core.Services.Implement
{
using ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true);
IEnumerable<IDataType> dataTypes = _dataTypeRepository.GetMany(ids).ToArray();
ConvertMissingEditorsOfDataTypesToLabels(dataTypes);
return dataTypes;
}
private void ConvertMissingEditorOfDataTypeToLabel(IDataType? dataType)
{
if (dataType == null)
{
return;
}
ConvertMissingEditorsOfDataTypesToLabels([dataType]);
}
private void ConvertMissingEditorsOfDataTypesToLabels(IEnumerable<IDataType> dataTypes)
{
// Any data types that don't have an associated editor are created of a specific type.
// We convert them to labels to make clear to the user why the data type cannot be used.
IEnumerable<IDataType> dataTypesWithMissingEditors = dataTypes.Where(x => x.Editor is MissingPropertyEditor);
foreach (IDataType dataType in dataTypesWithMissingEditors)
{
dataType.Editor = new LabelPropertyEditor(_dataValueEditorFactory, _ioHelper);
}
}
public Attempt<OperationResult<MoveOperationStatusType>?> Move(IDataType toMove, int parentId)
{
Guid? containerKey = null;