Last active
May 25, 2020 20:08
-
-
Save snerpton/2ace762bf17baae6381a9fdaa1f1bd3f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using Newtonsoft.Json; | |
using Newtonsoft.Json.Serialization; | |
using Odin.MemberReport.Models; | |
using System; | |
using System.Collections.Generic; | |
using System.Linq; | |
using System.Text; | |
using System.Web.Http.Results; | |
using System.Web.Mvc; | |
using Odin.MemberReport.Utilities; | |
using Umbraco.Core.Models; | |
using Umbraco.Core.Services; | |
using Umbraco.Web.Mvc; | |
using Umbraco.Web.WebApi; | |
namespace Odin.MemberReport.Models | |
{ | |
public class SiteMember | |
{ | |
public int Id { get; set; } | |
public string Name { get; set; } | |
public string Email { get; set; } | |
public DateTime LastLogin { get; set; } | |
} | |
public class SiteMemberGroup | |
{ | |
public int Id { get; set; } | |
public string Name { get; set; } | |
public List<SiteMember> Members { get; set; } | |
} | |
} | |
namespace Odin.MemberReport.Utilities | |
{ | |
public static class SiteMemberReportService | |
{ | |
public static List<SiteMemberGroup> CreateReport(IMemberGroupService memberGroupService, IMemberService memberService) | |
{ | |
var report = memberGroupService.GetAll() | |
.Select( | |
g => new SiteMemberGroup | |
{ | |
Id = g.Id, | |
Name = g.Name, | |
Members = memberService.GetMembersByGroup(g.Name) | |
.OrderByDescending(gm => gm.LastLoginDate) | |
.Select(gm => new SiteMember | |
{ | |
Email = gm.Email, | |
Id = gm.Id, | |
LastLogin = gm.LastLoginDate, | |
Name = gm.Name | |
}) | |
.ToList() | |
}) | |
.ToList(); | |
return report; | |
} | |
} | |
} | |
namespace Odin.MemberReport.Controllers | |
{ | |
public class MemberReportTxtController : SurfaceController | |
{ | |
private readonly IMemberGroupService _memberGroupService; | |
private readonly IMemberService _memberService; | |
public MemberReportTxtController() | |
{ | |
_memberService = Services.MemberService; | |
_memberGroupService = Services.MemberGroupService; | |
} | |
public ActionResult GetReport(int maxNumMembersPerGroup = -1) | |
{ | |
var report = SiteMemberReportService.CreateReport(_memberGroupService, _memberService); | |
var sb = new StringBuilder(); | |
foreach (var group in report) | |
{ | |
sb.Append($"<h1>Group: {group.Name}</h1>"); | |
sb.Append($"<p>Total in group: {group.Members.Count}</p>"); | |
sb.Append("<ul>"); | |
foreach (var member in group.Members.Take(maxNumMembersPerGroup)) | |
{ | |
sb.Append($"<li>{member.LastLogin.ToString("yy-MM-dd hh:mm:ss")} {member.Name}</li>"); | |
} | |
sb.Append("</ul>"); | |
} | |
return Content(sb.ToString()); | |
} | |
} | |
public class MemberReportJsonController : UmbracoAuthorizedApiController | |
{ | |
private readonly IMemberGroupService _memberGroupService; | |
private readonly IMemberService _memberService; | |
public MemberReportJsonController() | |
{ | |
_memberService = Services.MemberService; | |
_memberGroupService = Services.MemberGroupService; | |
} | |
public JsonResult<List<SiteMemberGroup>> GetReport() | |
{ | |
var model = SiteMemberReportService.CreateReport(_memberGroupService, _memberService); | |
var contractResolver = new DefaultContractResolver | |
{ | |
NamingStrategy = new CamelCaseNamingStrategy() | |
}; | |
return Json(model, new JsonSerializerSettings | |
{ | |
ContractResolver = contractResolver, | |
Formatting = Formatting.Indented | |
}); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment