Merge pull request #113 from RaidMax/enhancement/issue-112-toggle-automated-penalties-webfront
allow toggle of automated penalties display on the webfront
This commit is contained in:
commit
68490bde57
@ -1,4 +1,5 @@
|
||||
using Jint;
|
||||
using Microsoft.CSharp.RuntimeBinder;
|
||||
using SharedLibraryCore;
|
||||
using SharedLibraryCore.Database.Models;
|
||||
using SharedLibraryCore.Interfaces;
|
||||
@ -100,19 +101,20 @@ namespace IW4MAdmin.Application.Misc
|
||||
Name = pluginObject.name;
|
||||
Version = (float)pluginObject.version;
|
||||
|
||||
await OnLoadAsync(manager);
|
||||
|
||||
try
|
||||
{
|
||||
if (pluginObject.isParser)
|
||||
{
|
||||
await OnLoadAsync(manager);
|
||||
IEventParser eventParser = (IEventParser)_scriptEngine.GetValue("eventParser").ToObject();
|
||||
IRConParser rconParser = (IRConParser)_scriptEngine.GetValue("rconParser").ToObject();
|
||||
manager.AdditionalEventParsers.Add(eventParser);
|
||||
manager.AdditionalRConParsers.Add(rconParser);
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
|
||||
catch (RuntimeBinderException) { }
|
||||
|
||||
if (!firstRun)
|
||||
{
|
||||
|
@ -62,12 +62,13 @@ namespace SharedLibraryCore.Services
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public async Task<IList<PenaltyInfo>> GetRecentPenalties(int count, int offset, EFPenalty.PenaltyType showOnly = EFPenalty.PenaltyType.Any)
|
||||
public async Task<IList<PenaltyInfo>> GetRecentPenalties(int count, int offset, EFPenalty.PenaltyType showOnly = EFPenalty.PenaltyType.Any, bool ignoreAutomated = true)
|
||||
{
|
||||
using (var context = new DatabaseContext(true))
|
||||
{
|
||||
var iqPenalties = context.Penalties
|
||||
.Where(p => showOnly == EFPenalty.PenaltyType.Any ? p.Type != EFPenalty.PenaltyType.Any : p.Type == showOnly)
|
||||
.Where(_penalty => ignoreAutomated ? _penalty.PunisherId != 1 : true)
|
||||
.OrderByDescending(p => p.When)
|
||||
.Skip(offset)
|
||||
.Take(count)
|
||||
|
@ -18,21 +18,23 @@ namespace WebfrontCore.Controllers
|
||||
|
||||
}
|
||||
|
||||
public IActionResult List(PenaltyType showOnly = PenaltyType.Any)
|
||||
public IActionResult List(PenaltyType showOnly = PenaltyType.Any, bool hideAutomatedPenalties = true)
|
||||
{
|
||||
ViewBag.Description = "List of all the recent penalties (bans, kicks, warnings) on IW4MAdmin";
|
||||
ViewBag.Title = Localization["WEBFRONT_PENALTY_TITLE"];
|
||||
ViewBag.Keywords = "IW4MAdmin, penalties, ban, kick, warns";
|
||||
ViewBag.HideAutomatedPenalties = hideAutomatedPenalties;
|
||||
|
||||
return View(showOnly);
|
||||
}
|
||||
|
||||
public async Task<IActionResult> ListAsync(int offset = 0, PenaltyType showOnly = PenaltyType.Any)
|
||||
public async Task<IActionResult> ListAsync(int offset = 0, PenaltyType showOnly = PenaltyType.Any, bool hideAutomatedPenalties = true)
|
||||
{
|
||||
return await Task.FromResult(View("_List", new ViewModels.PenaltyFilterInfo()
|
||||
{
|
||||
Offset = offset,
|
||||
ShowOnly = showOnly
|
||||
ShowOnly = showOnly,
|
||||
IgnoreAutomated = hideAutomatedPenalties
|
||||
}));
|
||||
}
|
||||
|
||||
|
@ -9,9 +9,9 @@ namespace WebfrontCore.ViewComponents
|
||||
{
|
||||
private const int PENALTY_COUNT = 15;
|
||||
|
||||
public async Task<IViewComponentResult> InvokeAsync(int offset, EFPenalty.PenaltyType showOnly)
|
||||
public async Task<IViewComponentResult> InvokeAsync(int offset, EFPenalty.PenaltyType showOnly, bool ignoreAutomated)
|
||||
{
|
||||
var penalties = await Program.Manager.GetPenaltyService().GetRecentPenalties(PENALTY_COUNT, offset, showOnly);
|
||||
var penalties = await Program.Manager.GetPenaltyService().GetRecentPenalties(PENALTY_COUNT, offset, showOnly, ignoreAutomated);
|
||||
penalties = User.Identity.IsAuthenticated ? penalties : penalties.Where(p => !p.Sensitive).ToList();
|
||||
|
||||
return View("_List", penalties);
|
||||
|
@ -2,9 +2,24 @@
|
||||
|
||||
namespace WebfrontCore.ViewModels
|
||||
{
|
||||
/// <summary>
|
||||
/// helper class to determine the filters to apply to penalties
|
||||
/// </summary>
|
||||
public class PenaltyFilterInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// number of items offset from the start of the list
|
||||
/// </summary>
|
||||
public int Offset { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// show only a certain type of penalty
|
||||
/// </summary>
|
||||
public PenaltyType ShowOnly { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// ignore penalties that are automated
|
||||
/// </summary>
|
||||
public bool IgnoreAutomated { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@
|
||||
}
|
||||
<h4 class="pb-3 text-center">@ViewBag.Title</h4>
|
||||
<div class="row">
|
||||
<div class="d-block d-md-flex w-100 pb-2">
|
||||
<select class="form-control bg-dark text-muted" id="penalty_filter_selection">
|
||||
@{
|
||||
foreach (var penaltyType in Enum.GetValues(typeof(SharedLibraryCore.Database.Models.EFPenalty.PenaltyType)))
|
||||
@ -33,6 +34,24 @@
|
||||
}
|
||||
}
|
||||
</select>
|
||||
<div class="pl-md-2 pr-md-2 pt-2 pt-md-0">
|
||||
<label class="toggle-switch">
|
||||
@if (ViewBag.HideAutomatedPenalties)
|
||||
{
|
||||
<input type="checkbox" id="hide_automated_penalties_checkbox" checked="checked" />
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
<input type="checkbox" id="hide_automated_penalties_checkbox" />
|
||||
}
|
||||
<span class="toggle-switch-slider"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="align-self-center">
|
||||
<span class="text-light text-nowrap">@loc["WEBFRONT_PENALTY_HIDE_AUTOMATED"]</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<table class="table table-striped">
|
||||
@ -49,7 +68,8 @@
|
||||
@await Component.InvokeAsync("PenaltyList", new WebfrontCore.ViewModels.PenaltyFilterInfo()
|
||||
{
|
||||
Offset = 0,
|
||||
ShowOnly = Model
|
||||
ShowOnly = Model,
|
||||
IgnoreAutomated = ViewBag.HideAutomatedPenalties
|
||||
})
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -4,4 +4,4 @@
|
||||
|
||||
@model WebfrontCore.ViewModels.PenaltyFilterInfo
|
||||
|
||||
@await Component.InvokeAsync("PenaltyList", new { offset = Model.Offset, showOnly = Model.ShowOnly })
|
||||
@await Component.InvokeAsync("PenaltyList", new { offset = Model.Offset, showOnly = Model.ShowOnly, ignoreAutomated = Model.IgnoreAutomated })
|
@ -112,7 +112,7 @@ form *, select {
|
||||
border-left: none !important;
|
||||
border-right: none !important;
|
||||
border-bottom: none !important;
|
||||
border-top: 2px solid $blue !important;
|
||||
border-top: 1px solid $text-muted;
|
||||
}
|
||||
|
||||
.oi-fix-navbar {
|
||||
@ -341,3 +341,53 @@ title {
|
||||
color: #ff0000;
|
||||
}
|
||||
}
|
||||
|
||||
.toggle-switch input {
|
||||
opacity: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
margin:0;
|
||||
padding: 0;
|
||||
}
|
||||
label.toggle-switch {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.toggle-switch {
|
||||
position: relative;
|
||||
height: calc(1.5em + 0.75rem + 2px);
|
||||
width: 6rem;
|
||||
border: 1px solid $text-muted;
|
||||
}
|
||||
|
||||
.toggle-switch-slider {
|
||||
position: absolute;
|
||||
cursor: pointer;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-color: $dark;
|
||||
-webkit-transition: .4s;
|
||||
transition: .4s;
|
||||
}
|
||||
|
||||
.toggle-switch-slider:before {
|
||||
position: absolute;
|
||||
content: "";
|
||||
height: calc(1.5em + 0.75rem);
|
||||
width: 3em;
|
||||
background-color: $light;
|
||||
-webkit-transition: 0.25s;
|
||||
transition: 0.25s;
|
||||
}
|
||||
|
||||
input:checked + .toggle-switch-slider {
|
||||
background-color: $primary;
|
||||
}
|
||||
|
||||
input:checked + .toggle-switch-slider:before {
|
||||
-webkit-transform: translateX(3em);
|
||||
-ms-transform: translateX(3em);
|
||||
transform: translateX(3em);
|
||||
}
|
||||
|
@ -23,7 +23,11 @@ function loadMorePenalties() {
|
||||
|
||||
showLoader();
|
||||
isLoading = true;
|
||||
$.get('/Penalty/ListAsync', { offset: offset, showOnly : $('#penalty_filter_selection').val() })
|
||||
$.get('/Penalty/ListAsync', {
|
||||
offset: offset,
|
||||
showOnly: $('#penalty_filter_selection').val(),
|
||||
hideAutomatedPenalties: document.getElementById('hide_automated_penalties_checkbox').checked
|
||||
})
|
||||
.done(function (response) {
|
||||
$('#penalty_table').append(response);
|
||||
if (response.trim().length === 0) {
|
||||
@ -42,7 +46,11 @@ function loadMorePenalties() {
|
||||
if ($('#penalty_table').length === 1) {
|
||||
|
||||
$('#penalty_filter_selection').change(function () {
|
||||
location = location.href.split('?')[0] + "?showOnly=" + $('#penalty_filter_selection').val();
|
||||
location = location.href.split('?')[0] + "?showOnly=" + $('#penalty_filter_selection').val() + '&hideAutomatedPenalties=' + document.getElementById('hide_automated_penalties_checkbox').checked;
|
||||
});
|
||||
|
||||
$('#hide_automated_penalties_checkbox').click(function () {
|
||||
location = location.href.split('?')[0] + "?showOnly=" + $('#penalty_filter_selection').val() + '&hideAutomatedPenalties=' + document.getElementById('hide_automated_penalties_checkbox').checked;
|
||||
});
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user