mirror of https://github.com/Squidex/squidex.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.3 KiB
76 lines
2.3 KiB
// ==========================================================================
|
|
// ContentEnricher.cs
|
|
// Squidex Headless CMS
|
|
// ==========================================================================
|
|
// Copyright (c) Squidex Group
|
|
// All rights reserved.
|
|
// ==========================================================================
|
|
|
|
using Newtonsoft.Json.Linq;
|
|
using Squidex.Core.Contents;
|
|
using Squidex.Core.Schemas;
|
|
using Squidex.Infrastructure;
|
|
using Squidex.Infrastructure.Json;
|
|
|
|
namespace Squidex.Core
|
|
{
|
|
public sealed class ContentEnricher
|
|
{
|
|
private readonly Schema schema;
|
|
private readonly LanguagesConfig languagesConfig;
|
|
|
|
public ContentEnricher(LanguagesConfig languagesConfig, Schema schema)
|
|
{
|
|
Guard.NotNull(schema, nameof(schema));
|
|
Guard.NotNull(languagesConfig, nameof(languagesConfig));
|
|
|
|
this.schema = schema;
|
|
|
|
this.languagesConfig = languagesConfig;
|
|
}
|
|
|
|
public void Enrich(ContentData data)
|
|
{
|
|
Guard.NotNull(data, nameof(data));
|
|
|
|
foreach (var field in schema.FieldsByName.Values)
|
|
{
|
|
var fieldData = data.GetOrCreate(field.Name, k => new ContentFieldData());
|
|
|
|
if (field.RawProperties.IsLocalizable)
|
|
{
|
|
foreach (var languageConfig in languagesConfig)
|
|
{
|
|
Enrich(field, fieldData, languageConfig.Language);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Enrich(field, fieldData, Language.Invariant);
|
|
}
|
|
|
|
if (fieldData.Count > 0)
|
|
{
|
|
data.AddField(field.Name, fieldData);
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void Enrich(Field field, ContentFieldData fieldData, Language language)
|
|
{
|
|
Guard.NotNull(fieldData, nameof(fieldData));
|
|
|
|
var defaultValue = field.RawProperties.GetDefaultValue();
|
|
|
|
if (field.RawProperties.IsRequired || defaultValue.IsNull())
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!fieldData.TryGetValue(language, out JToken value) || value == null || value.Type == JTokenType.Null)
|
|
{
|
|
fieldData.AddValue(language, defaultValue);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|