Headless CMS and Content Managment Hub
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

// ==========================================================================
// 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);
}
}
}
}