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.
122 lines
4.1 KiB
122 lines
4.1 KiB
// ==========================================================================
|
|
// Squidex Headless CMS
|
|
// ==========================================================================
|
|
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
|
// All rights reserved. Licensed under the MIT license.
|
|
// ==========================================================================
|
|
|
|
using System.Threading.Tasks;
|
|
using Squidex.Domain.Apps.Core.Contents;
|
|
using Squidex.Domain.Apps.Core.Scripting;
|
|
|
|
namespace Squidex.Domain.Apps.Entities.Contents.DomainObject.Guards
|
|
{
|
|
public static class ScriptingExtensions
|
|
{
|
|
private static readonly ScriptOptions Options = new ScriptOptions
|
|
{
|
|
AsContext = true,
|
|
CanDisallow = true,
|
|
CanReject = true
|
|
};
|
|
|
|
public static async Task<ContentData> ExecuteCreateScriptAsync(this OperationContext context, ContentData data, Status status)
|
|
{
|
|
var script = context.SchemaDef.Scripts.Create;
|
|
|
|
if (!string.IsNullOrWhiteSpace(script))
|
|
{
|
|
var vars = Enrich(context, new ScriptVars
|
|
{
|
|
Operation = "Create",
|
|
Data = data,
|
|
DataOld = default,
|
|
Status = status,
|
|
StatusOld = default
|
|
});
|
|
|
|
data = await GetScriptEngine(context).TransformAsync(vars, script, Options);
|
|
}
|
|
|
|
return data;
|
|
}
|
|
|
|
public static async Task<ContentData> ExecuteUpdateScriptAsync(this OperationContext context, ContentData data)
|
|
{
|
|
var script = context.SchemaDef.Scripts.Update;
|
|
|
|
if (!string.IsNullOrWhiteSpace(script))
|
|
{
|
|
var vars = Enrich(context, new ScriptVars
|
|
{
|
|
Operation = "Update",
|
|
Data = data,
|
|
DataOld = context.Content.Data,
|
|
Status = context.Content.EditingStatus(),
|
|
StatusOld = default
|
|
});
|
|
|
|
data = await GetScriptEngine(context).TransformAsync(vars, script, Options);
|
|
}
|
|
|
|
return data;
|
|
}
|
|
|
|
public static async Task<ContentData> ExecuteChangeScriptAsync(this OperationContext context, Status status, StatusChange change)
|
|
{
|
|
var script = context.SchemaDef.Scripts.Change;
|
|
|
|
if (!string.IsNullOrWhiteSpace(script))
|
|
{
|
|
var data = context.Content.Data.Clone();
|
|
|
|
var vars = Enrich(context, new ScriptVars
|
|
{
|
|
Operation = change.ToString(),
|
|
Data = data,
|
|
DataOld = default,
|
|
Status = status,
|
|
StatusOld = context.Content.EditingStatus()
|
|
});
|
|
|
|
return await GetScriptEngine(context).TransformAsync(vars, script, Options);
|
|
}
|
|
|
|
return context.Content.Data;
|
|
}
|
|
|
|
public static async Task ExecuteDeleteScriptAsync(this OperationContext context)
|
|
{
|
|
var script = context.SchemaDef.Scripts.Delete;
|
|
|
|
if (!string.IsNullOrWhiteSpace(script))
|
|
{
|
|
var vars = Enrich(context, new ScriptVars
|
|
{
|
|
Operation = "Delete",
|
|
Data = context.Content.Data,
|
|
DataOld = default,
|
|
Status = context.Content.EditingStatus(),
|
|
StatusOld = default
|
|
});
|
|
|
|
await GetScriptEngine(context).ExecuteAsync(vars, script, Options);
|
|
}
|
|
}
|
|
|
|
private static IScriptEngine GetScriptEngine(OperationContext context)
|
|
{
|
|
return context.Resolve<IScriptEngine>();
|
|
}
|
|
|
|
private static ScriptVars Enrich(OperationContext context, ScriptVars vars)
|
|
{
|
|
vars.ContentId = context.ContentId;
|
|
vars.AppId = context.App.Id;
|
|
vars.AppName = context.App.Name;
|
|
vars.User = context.User;
|
|
|
|
return vars;
|
|
}
|
|
}
|
|
}
|
|
|