Skip to content

Instantly share code, notes, and snippets.

@snerpton
Last active May 25, 2020 20:08
Show Gist options
  • Save snerpton/2ace762bf17baae6381a9fdaa1f1bd3f to your computer and use it in GitHub Desktop.
Save snerpton/2ace762bf17baae6381a9fdaa1f1bd3f to your computer and use it in GitHub Desktop.
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