mirror of https://github.com/Squidex/squidex.git
39 changed files with 598 additions and 435 deletions
@ -1,86 +0,0 @@ |
|||
// ==========================================================================
|
|||
// Squidex Headless CMS
|
|||
// ==========================================================================
|
|||
// Copyright (c) Squidex UG (haftungsbeschränkt)
|
|||
// All rights reserved. Licensed under the MIT license.
|
|||
// ==========================================================================
|
|||
|
|||
using System; |
|||
using System.Collections; |
|||
using Squidex.Infrastructure.Translations; |
|||
|
|||
namespace Squidex.Domain.Apps.Core.ValidateContent.Validators |
|||
{ |
|||
public abstract class CollectionValidatorBase |
|||
{ |
|||
private readonly bool isRequired; |
|||
private readonly int? minItems; |
|||
private readonly int? maxItems; |
|||
|
|||
protected CollectionValidatorBase(bool isRequired, int? minItems = null, int? maxItems = null) |
|||
{ |
|||
if (minItems.HasValue && maxItems.HasValue && minItems > maxItems) |
|||
{ |
|||
throw new ArgumentException("Min length must be greater than max length.", nameof(minItems)); |
|||
} |
|||
|
|||
this.isRequired = isRequired; |
|||
this.minItems = minItems; |
|||
this.maxItems = maxItems; |
|||
} |
|||
|
|||
protected void ValidateRequired(object? value, ValidationContext context, AddError addError) |
|||
{ |
|||
var size = 0; |
|||
|
|||
if (value is ICollection items) |
|||
{ |
|||
size = items.Count; |
|||
} |
|||
|
|||
if (size == 0 && isRequired && !context.IsOptional) |
|||
{ |
|||
addError(context.Path, T.Get("contents.validation.required")); |
|||
} |
|||
} |
|||
|
|||
protected void ValidateSize(object? value, ValidationContext context, AddError addError) |
|||
{ |
|||
var size = 0; |
|||
|
|||
if (value is ICollection items) |
|||
{ |
|||
size = items.Count; |
|||
} |
|||
|
|||
if (size == 0) |
|||
{ |
|||
return; |
|||
} |
|||
|
|||
if (minItems.HasValue && maxItems.HasValue) |
|||
{ |
|||
if (minItems == maxItems && minItems != size) |
|||
{ |
|||
addError(context.Path, T.Get("contents.validation.itemCount", new { count = minItems })); |
|||
} |
|||
else if (size < minItems || size > maxItems) |
|||
{ |
|||
addError(context.Path, T.Get("contents.validation.itemCountBetween", new { min = minItems, max = maxItems })); |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
if (minItems.HasValue && size < minItems) |
|||
{ |
|||
addError(context.Path, T.Get("contents.validation.minItems", new { min = minItems })); |
|||
} |
|||
|
|||
if (maxItems.HasValue && size > maxItems) |
|||
{ |
|||
addError(context.Path, T.Get("contents.validation.maxItems", new { max = maxItems })); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue