Merge branch 'v15/dev' into v16/dev

# Conflicts:
#	src/Umbraco.Cms.Api.Management/Factories/RelationTypePresentationFactory.cs
#	src/Umbraco.Core/Services/PropertyValidationService.cs
#	src/Umbraco.Web.UI.Client/utils/all-umb-consts/imports.ts
This commit is contained in:
Andy Butland
2025-03-25 17:56:50 +01:00
152 changed files with 2985 additions and 1086 deletions

View File

@@ -1,8 +1,8 @@
using System.Globalization;
using Examine;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Scoping;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Infrastructure.Scoping;
using Umbraco.Extensions;
namespace Umbraco.Cms.Infrastructure.Examine;
@@ -15,7 +15,7 @@ public class ContentValueSetValidator : ValueSetValidator, IContentValueSetValid
private const string PathKey = "path";
private static readonly IEnumerable<string> ValidCategories = new[] { IndexTypes.Content, IndexTypes.Media };
private readonly IPublicAccessService? _publicAccessService;
private readonly Scoping.IScopeProvider? _scopeProvider;
private readonly IScopeProvider? _scopeProvider;
// used for tests
internal ContentValueSetValidator(bool publishedValuesOnly, int? parentId = null, IEnumerable<string>? includeItemTypes = null, IEnumerable<string>? excludeItemTypes = null)
@@ -27,11 +27,13 @@ public class ContentValueSetValidator : ValueSetValidator, IContentValueSetValid
bool publishedValuesOnly,
bool supportProtectedContent,
IPublicAccessService? publicAccessService,
Scoping.IScopeProvider? scopeProvider,
int? parentId,
IEnumerable<string>? includeItemTypes,
IEnumerable<string>? excludeItemTypes)
: base(includeItemTypes, excludeItemTypes, null, null)
IScopeProvider? scopeProvider,
int? parentId = null,
IEnumerable<string>? includeItemTypes = null,
IEnumerable<string>? excludeItemTypes = null,
IEnumerable<string>? includeFields = null,
IEnumerable<string>? excludeFields = null)
: base(includeItemTypes, excludeItemTypes, includeFields, excludeFields)
{
PublishedValuesOnly = publishedValuesOnly;
SupportProtectedContent = supportProtectedContent;

View File

@@ -91,8 +91,8 @@ internal sealed class MemberEditingService : IMemberEditingService
return IdentityMemberCreationFailed(createResult, status);
}
IMember member = _memberService.GetByEmail(createModel.Email)
?? throw new InvalidOperationException("Member creation succeeded, but member could not be found by email.");
IMember member = _memberService.GetByUsername(createModel.Username)
?? throw new InvalidOperationException("Member creation succeeded, but member could not be found by username.");
var updateRolesResult = await UpdateRoles(createModel.Roles, identityMember);
if (updateRolesResult is false)
@@ -258,10 +258,13 @@ internal sealed class MemberEditingService : IMemberEditingService
return MemberEditingOperationStatus.DuplicateUsername;
}
IMember? byEmail = _memberService.GetByEmail(model.Email);
if (byEmail is not null && byEmail.Key != memberKey)
if (_securitySettings.MemberRequireUniqueEmail)
{
return MemberEditingOperationStatus.DuplicateEmail;
IMember? byEmail = _memberService.GetByEmail(model.Email);
if (byEmail is not null && byEmail.Key != memberKey)
{
return MemberEditingOperationStatus.DuplicateEmail;
}
}
return MemberEditingOperationStatus.Success;