UserList improvements
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Linq;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Security;
|
||||
using Hangfire;
|
||||
using JoinExtensions.Enumerable;
|
||||
using LeafWeb.WebCms.Models;
|
||||
using LeafWeb.WebCms.Services;
|
||||
using log4net;
|
||||
@@ -215,13 +215,49 @@ namespace LeafWeb.WebCms.Controllers
|
||||
[MemberAuthorize(AllowGroup = "Administrator")]
|
||||
public ActionResult UserList()
|
||||
{
|
||||
var emails
|
||||
= from li in DataService.GetLeafInputs()
|
||||
var leafInputUsers=
|
||||
from li in DataService.GetLeafInputs()
|
||||
group li by li.Email
|
||||
into emailGroup
|
||||
select new { emailGroup.Key, emailGroup.FirstOrDefault().Name };
|
||||
select new UserViewModel
|
||||
{
|
||||
Email = emailGroup.Key,
|
||||
Name = emailGroup.FirstOrDefault().Name,
|
||||
LeafInputCount = emailGroup.Count(),
|
||||
FirstSeen = emailGroup.OrderBy(e => e.Added).FirstOrDefault().Added
|
||||
};
|
||||
|
||||
return View(emails.ToList().Select(e => new Tuple<string, string>(e.Name, e.Key)));
|
||||
var memberService = ApplicationContext.Current.Services.MemberService;
|
||||
|
||||
// join leaf input users and memberships together on email address
|
||||
var users =
|
||||
memberService.GetAllMembers()
|
||||
.FullOuterJoinExtEnumerable(
|
||||
leafInputUsers,
|
||||
m => m.Email,
|
||||
uvm => uvm.Email,
|
||||
(member, leafInputUser) =>
|
||||
{
|
||||
if (member == null)
|
||||
return leafInputUser;
|
||||
var vm = new UserViewModel
|
||||
{
|
||||
Email = member.Email,
|
||||
Name = member.Name,
|
||||
Member = true,
|
||||
FirstSeen = member.CreateDate
|
||||
};
|
||||
if (leafInputUser == null)
|
||||
return vm;
|
||||
|
||||
vm.LeafInputCount = leafInputUser.LeafInputCount;
|
||||
if (leafInputUser.FirstSeen < vm.FirstSeen)
|
||||
vm.FirstSeen = leafInputUser.FirstSeen;
|
||||
|
||||
return vm;
|
||||
});
|
||||
|
||||
return View(users.DistinctBy(u => u.Email).OrderByDescending(u => u.FirstSeen));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
|
||||
namespace LeafWeb.WebCms.Models
|
||||
{
|
||||
public class UserViewModel
|
||||
{
|
||||
public string Email { get; set; }
|
||||
public string Name { get; set; }
|
||||
public bool Member { get; set; }
|
||||
public int LeafInputCount { get; set; }
|
||||
|
||||
public DateTime FirstSeen { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,29 @@
|
||||
@model IEnumerable<Tuple<string,string>>
|
||||
@model IEnumerable<UserViewModel>
|
||||
|
||||
<div class="container mt-4">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-6 ">
|
||||
<table>
|
||||
|
||||
@foreach (var m in Model)
|
||||
{
|
||||
<div class="col-md-9">
|
||||
<table class="table table-striped table-bordered">
|
||||
<thead class="thead-light">
|
||||
<tr><th scope="col">Email</th><th scope="col">Name</th><th scope="col">First Seen</th><th scope="col">Member</th><th scope="col"># of Leaf Input</th></tr>
|
||||
</thead>
|
||||
<tbody >
|
||||
@foreach (var m in Model)
|
||||
{
|
||||
<tr>
|
||||
<th>@m.Item1</th><th>@m.Item2</th>
|
||||
<td>@m.Email</td>
|
||||
<td>@m.Name</td>
|
||||
<td>@m.FirstSeen.ToShortDateString()</td>
|
||||
<td>
|
||||
@if (m.Member)
|
||||
{
|
||||
<text>✔</text>
|
||||
}
|
||||
</td>
|
||||
<td>@m.LeafInputCount</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -118,6 +118,9 @@
|
||||
<Reference Include="interfaces, Version=1.0.8321.19793, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\UmbracoCms.Core.7.15.10\lib\net452\interfaces.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="JoinExtensions, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\leftjoin-rightjoin-fulljoin-outerjoin.3.2.0\lib\netstandard2.0\JoinExtensions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="log4net, Version=2.0.12.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\UmbracoCms.Core.7.15.10\lib\net452\log4net.dll</HintPath>
|
||||
</Reference>
|
||||
@@ -1237,6 +1240,7 @@
|
||||
<Compile Include="Models\SearchLeafInputDataViewModel.cs" />
|
||||
<Compile Include="Models\QueueViewModel.cs" />
|
||||
<Compile Include="Models\SelectListViewModel.cs" />
|
||||
<Compile Include="Models\UserViewModel.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Content Include="scripts\LeafDataQuery.js" />
|
||||
<Compile Include="Services\UrlService.cs" />
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
<package id="jQuery" version="3.4.1" targetFramework="net452" />
|
||||
<package id="jQuery.UI.Combined" version="1.12.1" targetFramework="net452" />
|
||||
<package id="jQuery.Validation" version="1.19.1" targetFramework="net452" />
|
||||
<package id="leftjoin-rightjoin-fulljoin-outerjoin" version="3.2.0" targetFramework="net472" />
|
||||
<package id="log4net" version="2.0.15" targetFramework="net472" />
|
||||
<package id="Log4Net.Async" version="2.0.4" targetFramework="net452" />
|
||||
<package id="Lucene.Net" version="2.9.4.1" targetFramework="net452" />
|
||||
|
||||
Reference in New Issue
Block a user