// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschränkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System.ComponentModel.DataAnnotations;
using System.Linq;
using Squidex.Domain.Apps.Core.Apps;
using Squidex.Domain.Apps.Entities.Apps;
using Squidex.Infrastructure;
using Squidex.Infrastructure.Reflection;
using Squidex.Shared;
using Squidex.Web;
namespace Squidex.Areas.Api.Controllers.Apps.Models
{
public sealed class AppLanguageDto : Resource
{
///
/// The iso code of the language.
///
[Required]
public string Iso2Code { get; set; }
///
/// The english name of the language.
///
[Required]
public string EnglishName { get; set; }
///
/// The fallback languages.
///
[Required]
public Language[] Fallback { get; set; }
///
/// Indicates if the language is the master language.
///
public bool IsMaster { get; set; }
///
/// Indicates if the language is optional.
///
public bool IsOptional { get; set; }
public static AppLanguageDto FromLanguage(LanguageConfig language, IAppEntity app)
{
var result = SimpleMapper.Map(language.Language,
new AppLanguageDto
{
IsMaster = language == app.LanguagesConfig.Master,
IsOptional = language.IsOptional,
Fallback = language.LanguageFallbacks.ToArray()
});
return result;
}
public AppLanguageDto WithLinks(ApiController controller, IAppEntity app)
{
var values = new { app = app.Name, language = Iso2Code };
if (!IsMaster)
{
if (controller.HasPermission(Permissions.AppLanguagesUpdate, app.Name))
{
AddPutLink("update", controller.Url(x => nameof(x.PutLanguage), values));
}
if (controller.HasPermission(Permissions.AppLanguagesDelete, app.Name) && app.LanguagesConfig.Count > 1)
{
AddDeleteLink("delete", controller.Url(x => nameof(x.DeleteLanguage), values));
}
}
return this;
}
}
}