Forward port of #19045 (Added custom RichTextRegexValidator to validate markup instead of JSON) (#19280)
This commit is contained in:
@@ -248,6 +248,8 @@ public static partial class UmbracoBuilderExtensions
|
||||
|
||||
builder.Services.AddSingleton<IRichTextRequiredValidator, RichTextRequiredValidator>();
|
||||
|
||||
builder.Services.AddSingleton<IRichTextRegexValidator, RichTextRegexValidator>();
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
||||
|
||||
@@ -93,6 +93,7 @@ public class RichTextPropertyEditor : DataEditor
|
||||
private readonly RichTextEditorPastedImages _pastedImages;
|
||||
private readonly IJsonSerializer _jsonSerializer;
|
||||
private readonly IRichTextRequiredValidator _richTextRequiredValidator;
|
||||
private readonly IRichTextRegexValidator _richTextRegexValidator;
|
||||
private readonly ILogger<RichTextPropertyValueEditor> _logger;
|
||||
|
||||
public RichTextPropertyValueEditor(
|
||||
@@ -111,6 +112,7 @@ public class RichTextPropertyEditor : DataEditor
|
||||
IPropertyValidationService propertyValidationService,
|
||||
DataValueReferenceFactoryCollection dataValueReferenceFactoryCollection,
|
||||
IRichTextRequiredValidator richTextRequiredValidator,
|
||||
IRichTextRegexValidator richTextRegexValidator,
|
||||
BlockEditorVarianceHandler blockEditorVarianceHandler,
|
||||
ILanguageService languageService,
|
||||
IIOHelper ioHelper)
|
||||
@@ -122,6 +124,7 @@ public class RichTextPropertyEditor : DataEditor
|
||||
_pastedImages = pastedImages;
|
||||
_htmlSanitizer = htmlSanitizer;
|
||||
_richTextRequiredValidator = richTextRequiredValidator;
|
||||
_richTextRegexValidator = richTextRegexValidator;
|
||||
_jsonSerializer = jsonSerializer;
|
||||
_logger = logger;
|
||||
|
||||
@@ -131,6 +134,8 @@ public class RichTextPropertyEditor : DataEditor
|
||||
|
||||
public override IValueRequiredValidator RequiredValidator => _richTextRequiredValidator;
|
||||
|
||||
public override IValueFormatValidator FormatValidator => _richTextRegexValidator;
|
||||
|
||||
protected override RichTextBlockValue CreateWithLayout(IEnumerable<RichTextBlockLayoutItem> layout) => new(layout);
|
||||
|
||||
/// <inheritdoc />
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
namespace Umbraco.Cms.Core.PropertyEditors.Validators;
|
||||
|
||||
internal interface IRichTextRegexValidator : IValueFormatValidator
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Umbraco.Cms.Core.Serialization;
|
||||
|
||||
namespace Umbraco.Cms.Core.PropertyEditors.Validators;
|
||||
|
||||
internal class RichTextRegexValidator : IRichTextRegexValidator
|
||||
{
|
||||
private readonly RegexValidator _regexValidator;
|
||||
private readonly IJsonSerializer _jsonSerializer;
|
||||
private readonly ILogger<RichTextRegexValidator> _logger;
|
||||
|
||||
public RichTextRegexValidator(
|
||||
IJsonSerializer jsonSerializer,
|
||||
ILogger<RichTextRegexValidator> logger)
|
||||
{
|
||||
_jsonSerializer = jsonSerializer;
|
||||
_logger = logger;
|
||||
_regexValidator = new RegexValidator();
|
||||
}
|
||||
|
||||
public IEnumerable<ValidationResult> ValidateFormat(object? value, string? valueType, string format) => _regexValidator.ValidateFormat(GetValue(value), valueType, format);
|
||||
|
||||
private object? GetValue(object? value) =>
|
||||
RichTextPropertyEditorHelper.TryParseRichTextEditorValue(value, _jsonSerializer, _logger, out RichTextEditorValue? richTextEditorValue)
|
||||
? richTextEditorValue?.Markup
|
||||
: value;
|
||||
}
|
||||
Reference in New Issue
Block a user