using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Mapping; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.ContentEditing; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Web.Common.Attributes; using Umbraco.Cms.Web.Common.Authorization; using Umbraco.Extensions; using Constants = Umbraco.Cms.Core.Constants; namespace Umbraco.Cms.Web.BackOffice.Controllers { /// /// An API controller used for dealing with member groups /// [PluginController(Constants.Web.Mvc.BackOfficeApiArea)] [Authorize(Policy = AuthorizationPolicies.TreeAccessMemberGroups)] [ParameterSwapControllerActionSelector(nameof(GetById), "id", typeof(int), typeof(Guid), typeof(Udi))] public class MemberGroupController : UmbracoAuthorizedJsonController { private readonly IMemberGroupService _memberGroupService; private readonly UmbracoMapper _umbracoMapper; private readonly ILocalizedTextService _localizedTextService; private readonly RoleManager> _roleManager; public MemberGroupController( IMemberGroupService memberGroupService, UmbracoMapper umbracoMapper, ILocalizedTextService localizedTextService, RoleManager> roleManager ) { _memberGroupService = memberGroupService ?? throw new ArgumentNullException(nameof(memberGroupService)); _roleManager = roleManager ?? throw new ArgumentNullException(nameof(roleManager)); _umbracoMapper = umbracoMapper ?? throw new ArgumentNullException(nameof(umbracoMapper)); _localizedTextService = localizedTextService ?? throw new ArgumentNullException(nameof(localizedTextService)); } /// /// Gets the member group json for the member group id /// /// /// public ActionResult GetById(int id) { IdentityRole memberGroup = _roleManager.FindByIdAsync(id.ToString()).Result; if (memberGroup == null) { return NotFound(); } MemberGroupDisplay dto = _umbracoMapper.Map, MemberGroupDisplay>(memberGroup); return dto; } /// /// Gets the member group json for the member group guid /// /// /// public ActionResult GetById(Guid id) { IMemberGroup memberGroup = _memberGroupService.GetById(id); if (memberGroup == null) { return NotFound(); } return _umbracoMapper.Map(memberGroup); } /// /// Gets the member group json for the member group udi /// /// /// public ActionResult GetById(Udi id) { var guidUdi = id as GuidUdi; if (guidUdi == null) { return NotFound(); } IMemberGroup memberGroup = _memberGroupService.GetById(guidUdi.Guid); if (memberGroup == null) { return NotFound(); } return _umbracoMapper.Map(memberGroup); } public IEnumerable GetByIds([FromQuery]int[] ids) { var roles = new List>(); foreach (int id in ids) { Task> role = _roleManager.FindByIdAsync(id.ToString()); roles.Add(role.Result); } return roles.Select(x=> _umbracoMapper.Map, MemberGroupDisplay>(x)); } [HttpDelete] [HttpPost] public IActionResult DeleteById(int id) { IMemberGroup memberGroup = _memberGroupService.GetById(id); if (memberGroup == null) { return NotFound(); } _memberGroupService.Delete(memberGroup); return Ok(); } public IEnumerable GetAllGroups() => _roleManager.Roles.Select(x => _umbracoMapper.Map, MemberGroupDisplay>(x)); public MemberGroupDisplay GetEmpty() { var item = new MemberGroup(); return _umbracoMapper.Map(item); } public ActionResult PostSave(MemberGroupSave saveModel) { var id = int.Parse(saveModel.Id.ToString()); var memberGroup = id > 0 ? _memberGroupService.GetById(id) : new MemberGroup(); if (memberGroup == null) { return NotFound(); } memberGroup.Name = saveModel.Name; _memberGroupService.Save(memberGroup); var display = _umbracoMapper.Map(memberGroup); display.AddSuccessNotification( _localizedTextService.Localize("speechBubbles/memberGroupSavedHeader"), string.Empty); return display; } } }