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.Mvc;
|
||||||
using System.Web.Security;
|
using System.Web.Security;
|
||||||
using Hangfire;
|
using Hangfire;
|
||||||
|
using JoinExtensions.Enumerable;
|
||||||
using LeafWeb.WebCms.Models;
|
using LeafWeb.WebCms.Models;
|
||||||
using LeafWeb.WebCms.Services;
|
using LeafWeb.WebCms.Services;
|
||||||
using log4net;
|
using log4net;
|
||||||
@@ -215,13 +215,49 @@ namespace LeafWeb.WebCms.Controllers
|
|||||||
[MemberAuthorize(AllowGroup = "Administrator")]
|
[MemberAuthorize(AllowGroup = "Administrator")]
|
||||||
public ActionResult UserList()
|
public ActionResult UserList()
|
||||||
{
|
{
|
||||||
var emails
|
var leafInputUsers=
|
||||||
= from li in DataService.GetLeafInputs()
|
from li in DataService.GetLeafInputs()
|
||||||
group li by li.Email
|
group li by li.Email
|
||||||
into emailGroup
|
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="container mt-4">
|
||||||
<div class="row justify-content-center">
|
<div class="row justify-content-center">
|
||||||
<div class="col-md-6 ">
|
<div class="col-md-9">
|
||||||
<table>
|
<table class="table table-striped table-bordered">
|
||||||
|
<thead class="thead-light">
|
||||||
@foreach (var m in Model)
|
<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>
|
<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>
|
</tr>
|
||||||
}
|
}
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -118,6 +118,9 @@
|
|||||||
<Reference Include="interfaces, Version=1.0.8321.19793, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="interfaces, Version=1.0.8321.19793, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\UmbracoCms.Core.7.15.10\lib\net452\interfaces.dll</HintPath>
|
<HintPath>..\packages\UmbracoCms.Core.7.15.10\lib\net452\interfaces.dll</HintPath>
|
||||||
</Reference>
|
</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">
|
<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>
|
<HintPath>..\packages\UmbracoCms.Core.7.15.10\lib\net452\log4net.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
@@ -1237,6 +1240,7 @@
|
|||||||
<Compile Include="Models\SearchLeafInputDataViewModel.cs" />
|
<Compile Include="Models\SearchLeafInputDataViewModel.cs" />
|
||||||
<Compile Include="Models\QueueViewModel.cs" />
|
<Compile Include="Models\QueueViewModel.cs" />
|
||||||
<Compile Include="Models\SelectListViewModel.cs" />
|
<Compile Include="Models\SelectListViewModel.cs" />
|
||||||
|
<Compile Include="Models\UserViewModel.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Content Include="scripts\LeafDataQuery.js" />
|
<Content Include="scripts\LeafDataQuery.js" />
|
||||||
<Compile Include="Services\UrlService.cs" />
|
<Compile Include="Services\UrlService.cs" />
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
<package id="jQuery" version="3.4.1" targetFramework="net452" />
|
<package id="jQuery" version="3.4.1" targetFramework="net452" />
|
||||||
<package id="jQuery.UI.Combined" version="1.12.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="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" version="2.0.15" targetFramework="net472" />
|
||||||
<package id="Log4Net.Async" version="2.0.4" targetFramework="net452" />
|
<package id="Log4Net.Async" version="2.0.4" targetFramework="net452" />
|
||||||
<package id="Lucene.Net" version="2.9.4.1" targetFramework="net452" />
|
<package id="Lucene.Net" version="2.9.4.1" targetFramework="net452" />
|
||||||
|
|||||||
Reference in New Issue
Block a user