using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using System.Globalization; using System.Linq; using System.Threading.Tasks; using zero.Core; using zero.Core.Api; using zero.Core.Entities; using zero.Core.Extensions; using zero.Core.Identity; using zero.Web.Mapper; using zero.Web.Models; namespace zero.Web.Controllers { [ZeroAuthorize(Permissions.Settings.Languages, PermissionsValue.Read)] public class LanguagesController : BackofficeController { private ILanguagesApi Api { get; set; } private ZeroOptions Options { get; set; } public LanguagesController(IZeroConfiguration config, ILanguagesApi api, IMapper mapper, IToken token, IOptionsMonitor options) : base(config, mapper, token) { Api = api; Options = options.CurrentValue; } /// /// Get translation by id /// public IActionResult GetEmpty() { return Json(new LanguageEditModel()); } /// /// Get translation by id /// public async Task GetById([FromQuery] string id) { return await As(await Api.GetById(id)); } /// /// Get all translations /// public async Task GetAll([FromQuery] ListQuery query) { return await As(await Api.GetByQuery(query)); } /// /// Returns all cultures available for creating languages. /// public IActionResult GetAllCultures() { return Json(CultureInfo.GetCultures(CultureTypes.AllCultures) .Where(x => !x.Name.IsNullOrWhiteSpace()) .Select(x => new CultureInfo(x.Name)) .OrderBy(x => x.DisplayName) .Select(x => new { code = x.Name, name = x.DisplayName })); } /// /// Save translation /// [ZeroAuthorize(Permissions.Settings.Languages, PermissionsValue.Write)] public async Task Save([FromBody] LanguageEditModel model) { Language entity = await Mapper.Map(model, await Api.GetById(model.Id)); return await As(await Api.Save(entity)); } /// /// Deletes a translation /// [ZeroAuthorize(Permissions.Settings.Languages, PermissionsValue.Write)] public async Task Delete([FromQuery] string id) { return await As(await Api.Delete(id)); } } }